मेरे पास एक वेब एप्लिकेशन है। मुझे विश्वास नहीं है कि प्रौद्योगिकी महत्वपूर्ण है। संरचना एक एन-टियर एप्लिकेशन है, जो बाईं ओर की छवि में दिखाया गया है। 3 परतें हैं।
UI (MVC पैटर्न), बिजनेस लॉजिक लेयर (BLL) और डेटा एक्सेस लेयर (DAL)
मेरे पास जो समस्या है वह मेरी बीएलएल है, यह बड़े पैमाने पर है क्योंकि इसमें एप्लिकेशन ईवेंट कॉल के माध्यम से तर्क और रास्ते हैं।
आवेदन के माध्यम से एक विशिष्ट प्रवाह हो सकता है:
UI में फंसी हुई घटना, BLL में एक विधि के लिए पार, तर्क प्रदर्शन (संभवतः BLL के कई हिस्सों में), अंततः DAL के लिए, वापस BLL (जहाँ संभवतः अधिक तर्क) और फिर UI के लिए कुछ मान लौटाते हैं।
इस उदाहरण में BLL बहुत व्यस्त है और मैं सोच रहा हूं कि इसे कैसे विभाजित किया जाए। मेरे पास तर्क और वस्तुएं भी हैं जो मुझे पसंद नहीं हैं।
दाईं ओर का संस्करण मेरा प्रयास है।
तर्क अभी भी कैसे आवेदन यूआई और दाल के बीच बहती है, लेकिन संभावित कोई गुण ... केवल विधियों (इस परत में कक्षाओं के बहुमत रहे सका संभवतः स्थिर हो क्योंकि वे किसी भी राज्य को संग्रहीत नहीं करते हैं)। पोको परत वह जगह है जहां कक्षाएं मौजूद होती हैं, जिनमें गुण होते हैं (जैसे कि व्यक्ति वर्ग जहां नाम, आयु, ऊंचाई आदि होगा)। आवेदन के प्रवाह से इनका कोई लेना-देना नहीं होता, वे केवल राज्य को संग्रहीत करते हैं।
प्रवाह हो सकता है:
यहां तक कि UI से ट्रिगर किया गया और UI परत नियंत्रक (MVC) के लिए कुछ डेटा पास करता है। यह कच्चे डेटा का अनुवाद करता है और इसे पोको मॉडल में परिवर्तित करता है। पोको मॉडल को तब लॉजिक लेयर (जिसे BLL) में पास किया गया था और अंततः कमांड क्वेरी लेयर में, संभवतः रास्ते में हेरफेर किया गया। कमांड क्वेरी लेयर POCO को एक डेटाबेस ऑब्जेक्ट में परिवर्तित करता है (जो लगभग एक ही चीज है, लेकिन एक दृढ़ता के लिए डिज़ाइन किया गया है, दूसरा सामने के छोर के लिए)। आइटम संग्रहीत किया जाता है और एक डेटाबेस ऑब्जेक्ट को कमांड क्वेरी लेयर में लौटा दिया जाता है। इसे तब एक POCO में परिवर्तित कर दिया जाता है, जहां यह तर्क परत में लौटता है, संभवतः आगे संसाधित किया जाता है और फिर अंत में, UI पर वापस आ जाता है
साझा तर्क और इंटरफ़ेस वह जगह है जहाँ हमारे पास लगातार डेटा हो सकता है, जैसे कि MaxNumberOf_X और TotalAllowed_X और सभी इंटरफेस।
दोनों साझा तर्क / इंटरफेस और DAL वास्तुकला का "आधार" हैं। ये बाहरी दुनिया के बारे में कुछ नहीं जानते हैं।
साझा तर्क / इंटरफेस और डीएएल के अलावा पोको के बारे में सब कुछ पता है।
प्रवाह अभी भी पहले उदाहरण के समान है, लेकिन इसने प्रत्येक परत को 1 चीज़ के लिए अधिक ज़िम्मेदार बनाया है (यह राज्य, प्रवाह या कुछ और हो) ... लेकिन क्या मैं इस दृष्टिकोण के साथ ओओपी को तोड़ रहा हूं?
तर्क और पोको को प्रदर्शित करने के लिए एक उदाहरण हो सकता है:
public class LogicClass
{
private ICommandQueryObject cmdQuery;
public PocoA Method1(PocoB pocoB)
{
return cmdQuery.Save(pocoB);
}
/*This has no state objects, only ways to communicate with other
layers such as the cmdQuery. Everything else is just function
calls to allow flow via the program */
public PocoA Method2(PocoB pocoB)
{
pocoB.UpdateState("world");
return Method1(pocoB);
}
}
public struct PocoX
{
public string DataA {get;set;}
public int DataB {get;set;}
public int DataC {get;set;}
/*This simply returns something that is part of this class.
Everything is self-contained to this class. It doesn't call
trying to directly communicate with databases etc*/
public int GetValue()
{
return DataB * DataC;
}
/*This simply sets something that is part of this class.
Everything is self-contained to this class.
It doesn't call trying to directly communicate with databases etc*/
public void UpdateState(string input)
{
DataA += input;
}
}