मैं एक व्यावहारिक दृष्टिकोण अपनाऊंगा - ऐतिहासिक रूप से संग्रहीत प्रोक्स में व्यावसायिक तर्क रखने का प्राथमिक 'लाभ' प्रदर्शन कारणों (2.5 स्तरीय वास्तुकला) के लिए है, जबकि व्यावसायिक तर्क को एक BLL टियर (3 / N tier) में अलग करना आम तौर पर एक से क्लीनर है रखरखाव के परिप्रेक्ष्य, और परीक्षण करने में आसान (डेटा एक्सेस का मॉक / स्टब आउट)।
हालांकि, यह देखते हुए कि LINQ2SQL, EF और NHibernate जैसे LINQ- सक्षम .NET ORMS अब पैरामीटर किए गए SQL क्वेरी बनाते हैं, जहां क्वेरी प्लान को कैश किया जा सकता है, SQL इंजेक्शन आदि के लिए बच जाते हैं, मुझे लगता है कि 3 या N टियर आर्किटेक्चर के लिए कदम है पहले से कहीं अधिक सम्मोहक, और अधिकांश SPROCs (विशेषकर क्वेरी-केंद्रित वाले) को पूरी तरह से टाला जा सकता है। .NET में रिपॉजिटरी पैटर्न आमतौर पर IQueryable / एक्सेप्ट करें। अभिव्यक्ति ट्री मापदंडों को स्वीकार करते हैं, जो आपके टेबल पर सुरक्षित, फिर भी लचीली पहुंच के लिए अनुमति देता है। (व्यक्तिगत रूप से SOA प्रकार के आर्किटेक्चर में, मैं BL से परे IQueryable को उजागर नहीं करूंगा, अर्थात आपकी सेवा और प्रस्तुति टियर को अच्छी तरह से परिभाषित तरीकों के साथ काम करना चाहिए। कारण यह है कि अन्यथा आप पूरी तरह से अपने सिस्टम का परीक्षण कभी नहीं कर सकते, और आप जीत गए। '
हालांकि, एक सभ्य आकार की प्रणाली में, हमेशा कुछ अपवाद होंगे, जहां प्रदर्शन के कारणों के लिए कोड के एक वास्तव में डेटा तीव्रता वाले टुकड़े को अभी भी संग्रहीत प्रोक के रूप में लिखने की आवश्यकता हो सकती है। इन उदाहरणों में मैं SPROC को रखेगा, और ORM के माध्यम से SPROC को उजागर करेगा, लेकिन फिर भी आपके BLL पर पास-थ्रू विधि के रूप में फ़ंक्शन को उजागर करेगा।