Tôi sẽ áp dụng một cách tiếp cận thực tế - về mặt lịch sử, 'lợi ích' chính của việc giữ logic kinh doanh trong các procs được lưu trữ là vì lý do hiệu suất (kiến trúc 2,5 tầng), trong khi tách logic kinh doanh thành tầng BLL (tầng 3 / N) thường sạch hơn với quan điểm bảo trì và dễ kiểm tra hơn (Mock / Stub out truy cập dữ liệu).
Tuy nhiên, do các ORMS .NET hỗ trợ LINQ như LINQ2Query, EF và NHibernate hiện tạo các truy vấn SQL được tham số hóa, trong đó các kế hoạch truy vấn có thể được lưu trong bộ nhớ cache, được thoát cho SQL Injection, v.v., tôi đoán rằng việc chuyển sang kiến trúc tầng 3 / N là hấp dẫn hơn bao giờ hết và hầu hết các XUÂN (đặc biệt là các trung tâm truy vấn) có thể tránh được hoàn toàn. Các mẫu kho lưu trữ trong .NET thường hiển thị các tham số cây Biểu thức IQueryable / accept, cho phép truy cập an toàn nhưng linh hoạt vào các bảng của bạn. (Cá nhân trong các kiến trúc kiểu SOA, tôi sẽ không đưa ra IQueryable ngoài BLL, tức là các tầng Dịch vụ và Trình bày của bạn nên hoạt động với một bộ phương thức được xác định rõ. Lý do là nếu không bạn không thể kiểm tra đầy đủ hệ thống của mình và bạn đã thắng '
Tuy nhiên, trong một hệ thống có kích thước khá, sẽ luôn có một vài trường hợp ngoại lệ, trong đó một đoạn mã thực sự dữ liệu có thể vẫn cần phải được viết dưới dạng Proc được lưu trữ vì lý do hiệu năng. Trong các trường hợp này, tôi sẽ giữ XUÂN và hiển thị XUÂN thông qua ORM, nhưng vẫn hiển thị chức năng như một phương thức chuyển qua trên BLL của bạn.