Saya akan mengadopsi pendekatan pragmatis - secara historis 'manfaat' utama dari menjaga logika bisnis dalam procs yang disimpan adalah untuk alasan kinerja (2.5 tingkat arsitektur), sedangkan memisahkan logika bisnis menjadi tingkat BLL (tingkat 3 / N) umumnya lebih bersih dari perspektif perawatan, dan lebih mudah untuk menguji (Mock / stub out akses data).
Namun, mengingat bahwa. ORMS BERSIH berkemampuan LINQ seperti LINQ2SQL, EF dan NHibernate sekarang membuat kueri SQL berparameter, di mana paket kueri dapat di-cache, diloloskan ke SQL Injection dll, saya akan menduga bahwa langkah menuju arsitektur tingkat 3 / N adalah lebih menarik dari sebelumnya, dan sebagian besar SPROC (terutama yang berpusat pada permintaan) dapat dihindari sama sekali. Pola repositori di .NET biasanya mengekspos IQueryable / menerima parameter pohon Ekspresi, memungkinkan untuk jenis akses yang aman, namun fleksibel ke tabel Anda. (Secara pribadi dalam arsitektur tipe SOA, saya tidak akan mengekspos IQueryable di luar BLL, yaitu tingkat Layanan dan Presentasi Anda harus bekerja dengan serangkaian metode yang terdefinisi dengan baik. Alasannya adalah jika tidak, Anda tidak akan pernah dapat sepenuhnya menguji sistem Anda, dan Anda akan menang '
Namun, dalam sistem ukuran yang layak, akan selalu ada beberapa pengecualian, di mana sepotong kode yang benar-benar intensif data mungkin masih perlu ditulis sebagai Stored Proc untuk alasan kinerja. Dalam hal ini saya akan menyimpan SPROC, dan mengekspos SPROC melalui ORM, tetapi masih mengekspos fungsi sebagai metode pass-through pada BLL Anda.