Pragmatik bir yaklaşım benimsemektim - tarihsel olarak iş mantığını depolanan süreçlerde tutmanın temel 'yararı' performans nedenleriyle (2.5 kademe mimari), iş mantığını ise BLL katmanına (3 / N kademe) ayırmak genellikle bakım perspektifi ve test edilmesi daha kolay (Veri erişimini sahte / engelle).
Ancak, LINQ2SQL, EF ve NHibernate gibi LINQ etkin .NET ORMS'lerinin şimdi, sorgu planlarının önbelleğe alınabileceği parametreli SQL sorguları oluşturduğu göz önüne alındığında, SQL Injection vb. her zamankinden daha çekici ve SPROC'ların çoğundan (özellikle sorgu merkezli olanlar) tamamen kaçınılabilir. .NET'teki depo desenleri genel olarak IQueryable / accept Expression ağacı parametrelerini gösterir ve bu sayede tablolarınıza güvenli, ancak esnek bir erişim sağlar. (Şahsen SOA tipi mimarilerde, IQueryable’e BLL’nin ötesinde maruz kalmam, yani Hizmet ve Sunum katmanlarınız iyi tanımlanmış yöntemlerle çalışmalıdır. Aksi halde sisteminizi asla tam olarak test edemezsiniz ve kazanırsınız '
Bununla birlikte, iyi bir büyüklükte bir sistemde, performans nedenleriyle gerçekten veri yoğun bir kod parçasının yine de Stored Proc olarak yazılması gerekebilecek birkaç istisna olacaktır. Bu gibi durumlarda, SPROC’yi koruyacağım ve SPROC’yi ORM aracılığıyla göstereceğim, ancak yine de işlevi BLL’nizde bir geçiş yöntemi olarak göstereceğim.