ฉันจะนำวิธีการปฏิบัติ - ประวัติศาสตร์ 'ประโยชน์' หลักของการรักษาตรรกะทางธุรกิจใน procs ที่เก็บไว้สำหรับเหตุผลด้านประสิทธิภาพ (สถาปัตยกรรมชั้น 2.5) ในขณะที่การแยกตรรกะทางธุรกิจเป็นชั้น BLL (3 / N ชั้น) โดยทั่วไปจะสะอาดจาก มุมมองการบำรุงรักษาและง่ายต่อการทดสอบ (จำลอง / ตัดการเข้าถึงข้อมูล)
อย่างไรก็ตามจากที่เปิดใช้งาน. NET ORMS ที่เปิดใช้งาน LINQ เช่น LINQ2SQL, EF และ NHibernate ในขณะนี้จะสร้างการสืบค้น SQL ที่กำหนดพารามิเตอร์ซึ่งแผนการเคียวรีสามารถแคชไว้ได้จะถูกหลบหนีสำหรับ SQL Injection เป็นต้นฉันเดาว่าการย้ายไปสู่สถาปัตยกรรมชั้น 3 / N น่าดึงดูดยิ่งกว่าที่เคยและ SPROC ส่วนใหญ่ (โดยเฉพาะข้อความค้นหาเป็นศูนย์กลาง) สามารถหลีกเลี่ยงได้ทั้งหมด รูปแบบพื้นที่เก็บข้อมูลใน. NET มักจะเปิดเผยพารามิเตอร์ IQueryable / ยอมรับ Expression tree ช่วยให้สามารถเข้าถึงตารางของคุณได้อย่างปลอดภัย แต่มีความยืดหยุ่น (โดยส่วนตัวในสถาปัตยกรรมประเภท SOA ฉันจะไม่เปิดเผย IQueryable เกิน BLL นั่นคือระดับการบริการและการนำเสนอของคุณควรทำงานกับชุดของวิธีการที่กำหนดไว้อย่างดีเหตุผลคือมิฉะนั้นคุณจะไม่สามารถทดสอบระบบของคุณได้อย่างสมบูรณ์
อย่างไรก็ตามในระบบที่มีขนาดพอเหมาะจะมีข้อยกเว้นเล็กน้อยอยู่เสมอซึ่งชิ้นส่วนที่มีความเข้มข้นของข้อมูลจริงๆอาจยังต้องถูกเขียนเป็น Stored Proc ด้วยเหตุผลด้านประสิทธิภาพ ในกรณีเหล่านี้ฉันจะเก็บ SPROC และเปิดเผย SPROC ผ่าน ORM แต่ยังคงแสดงฟังก์ชันเป็นวิธีการส่งผ่านบน BLL ของคุณ