एक 3 स्तरीय वास्तुकला 3 मुख्य परतें
- पी एल प्रस्तुति परत
- BLL व्यापार तर्क परत
- दाल डेटा एक्सेस परत
प्रत्येक द्वारा रचित है शीर्ष परत केवल नीचे की परत पूछती है और कभी नहीं इसके शीर्ष पर कुछ भी देखता है।
जब वे आप से पूछना के बारे में आप अपने BLL का निर्माण करेगा, आप की तरह कुछ लिख सकते हैं:
:
namespace Company.BLL
{
// let's create an interface so it's easy to create other BLL's if needed
public interface ICompanyBLL
{
public int Save(Order order, UserPermissions user);
}
public class Orders : ICompanyBLL
{
// Dependency Injection so you can use any kind of BLL
// based in a workflow for example
private Company.DAL db;
public Orders(Company.DAL dalObject)
{
this.db = dalObject;
}
// As this is a Business Layer, here is where you check for user rights
// to perform actions before you access the DAL
public int Save(Order order, UserPermissions user)
{
if(user.HasPermissionSaveOrders)
return db.Orders.Save(order);
else
return -1;
}
}
}
एक परियोजना मैं बना रहा हूं की एक जीवित उदाहरण के रूप में
पीएल सभी सार्वजनिक उजागर सेवाएं हैं, मेरे डीएएल डेटाबेस तक सभी पहुंच को संभालता है, मैं hav ईए सेवा लेयर कि सेवा के 2 संस्करण संभालती है, एक पुराने ASMX और नए WCF सेवा, वे एक Interface
के माध्यम से उजागर कर रहे हैं तो यह आसान है मुझे चुनने के लिए ऑन-द-फ्लाई क्या सेवा उपयोगकर्ता
का उपयोग किया जाएगा
public class MainController : Controller
{
public IServiceRepository service;
protected override void Initialize(System.Web.Routing.RequestContext requestContext)
{
...
if (thisUser.currentConnection.ws_version == 6)
// Use old ASMX Web Service
service = new WebServiceRepository6(url, ws_usr, ws_pwd);
else if (thisUser.currentConnection.ws_version == 7)
// Use the brand new WCF Service
service = new WebServiceRepository7(url, ws_usr, ws_pwd);
...
}
}
उपर्युक्त कोड में, मैं इस परत पर (अन्य प्रस्तुति परत के रूप में प्रस्तुति परत के रूप में प्रस्तुति परत के रूप में अन्य परत के ज्ञान को अलग करने के लिए निर्भरता इंजेक्शन का उपयोग करता हूं) इसे कभी भी कॉल करने के बारे में परवाह नहीं करना चाहिए सेवा और उपयोगकर्ता ServiceB
के बजाय ServiceA
का उपयोग करता है ... यह जानने की आवश्यकता है कि IService.ListAllProjects()
पर कॉल करने से सही परिणाम मिलेंगे।
आप प्रस्तावों को विभाजित करना शुरू करते हैं और यदि सेवा कनेक्शन में कोई समस्या दिखाई देती है, तो आप जानते हैं कि प्रस्तुति परत से कोई लेना देना नहीं है, यह सेवा परत (मेरे मामले में) है और यह आसान है और आसानी से एक नया service.dll
तैनात किया जा सकता है इसके बजाय पूरी वेबसाइट को फिर से प्रकाशित करना ...
मेरे पास एक सहायक भी है जो सभी व्यवसाय ऑब्जेक्ट्स रखता है जो मैं सभी परियोजनाओं में उपयोग करता हूं।
मुझे उम्मीद है कि यह मदद करता है।
प्रश्न था 'केवल अपना व्यवसाय परत वास्तुकला दिखाएं'? क्या कोई संदर्भ नहीं था? क्या उसने आपको 3-स्तरीय वास्तुकला के बारे में स्पष्ट रूप से पूछा था? यदि संदर्भ के बिना आपको इस प्रश्न से पूछा गया था तो आपको जवाब देना चाहिए था कि आपके पास विभिन्न परिदृश्यों के लिए अलग-अलग आर्किटेक्चर हैं। –
साक्षात्कार नहीं है या आपके पास दूसरा दौर होगा? :-) –
@ डारिन: उसने मुझे 3 स्तरीय आर्किटेक्चर दिखाने के लिए कहा – Sandy