2008-09-30 15 views
5

मूल रूप से डीएएल ऑब्जेक्ट था जो मेरे बीओ को जानकारी के लिए बुलाया गया था और फिर यूआई को पास किया गया था। तब मैंने यूआई में कम कोड को देखना शुरू कर दिया और वहां नियंत्रक वर्ग थे। सभ्य अनुशंसा क्या है।ओओपी पैटर्न डिजाइन (डेटा एक्सेस)

मैं वर्तमान संरचना मेरा

Public Class OrderDAL 

    Private _id Integer 
    Private _order as Order 

    Public Function GetOrder(id as Integer) as Order 

     ...return Order 

    End Function 

End Class 

तो मैं नियंत्रक वर्गों (इस शैली हाल ही में लागू)

Public Class OrderController 

    Private Shared _orderDAL as new OrderDAL 

    Public Shared Function GetOrder(id) As Order 

     Return _orderDAL.GetOrder(id) 

    End Function 

End Class 
फिर अपने आवेदन में

My app Sub 

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click 

     msgbox(OrderController.GetOrder(12345).Customer.Name) 

    End Sub 


End app 

मैं मूल रूप से पाया गया कि है साझा कक्षा मुझे जब भी मैं डीएएल का एक नया उदाहरण बनाना जारी रखना नहीं था डेटा लाने के लिए eed

Dim _orderDAL as New OrderDal 

_orderDAL.GetOrder(1234) 

..... 

आपका क्या लेना है?

धन्यवाद

+0

कोडिंग के बारे में क्षमा करें। हां, मेरा ऐप ऑर्डर प्रोसेसिंग और रिपोर्टिंग में आधारित है। मेरे सभी डेटा एक्सेस डालें, अपडेट करें, हटाएं, प्राप्त करें DALS में है। मेरे फ्रंट एंड ऐप (विनफॉर्म) से, मैं नियंत्रक कक्षाओं के माध्यम से डीएएल तक पहुंचता हूं, ये कक्षाएं कुछ अन्य चीजें भी करती हैं जैसे कि कोई उत्पाद वापस नहीं किया गया था, यह एक विशिष्ट रूप में एक संदेश पोस्ट करता है। बात यह है कि नियंत्रक वर्ग वास्तव में आवश्यक हैं? मूल रूप से मैं अपने सभी कार्यकर्ता कोड (मेरा नामकरण) को प्रत्येक रूप में सीधे बंडल कर दूंगा, हालांकि, कुछ अन्य रूपों में दोहराव वाले कॉल थे, इसलिए नियंत्रक वर्ग और साझा फ़ंक्शंस और सबस के साथ, मैं w –

उत्तर

0

मैंने आपके समाधान का अतीत में उपयोग किया है, और मुझे सामना करने वाली एकमात्र समस्या यह है कि "साझा" या "स्थैतिक" विधियां विरासत का समर्थन नहीं करती हैं। जब आपका आवेदन बढ़ता है, तो आपको विभिन्न प्रकार के "ऑर्डर कंट्रोलर" का समर्थन करने की आवश्यकता हो सकती है।

होगा, सिद्धांत रूप में, एक कारखाने बनाने के लिए अलग अलग OrderControllers का समर्थन करने का estabilished रास्ता:

OrderControllerFactory.ConfiguredOrderController().GetOrder(42); 

समस्या यहाँ है: किस प्रकार "ConfiguredOrderController()" द्वारा दिया जाता है? क्योंकि इसमें स्थिर "GetOrder (int id)" विधि होनी चाहिए - और स्थैतिक विधियां विरासत या इंटरफेस द्वारा समर्थित नहीं हैं। इसके आसपास का तरीका ऑर्डर कंट्रोलर क्लास में स्थिर तरीकों का उपयोग नहीं करना है।

public interface IOrderController 
{ 
    Order GetOrder(int Id) 
} 

public class OrderController: IOrderController 
{ 
    public Order GetOrder(int Id) 
    {} 
} 

और

public class OrderControllerFactory() 
{ 
    public IOrderController ConfiguredOrderController() 
    {} 
} 

इसलिए, आप शायद नियंत्रक के लिए गैर स्थिर तरीकों का उपयोग करके बेहतर हो जाएगा।

0

खैर अपना ऐप्लिकेशन डेटा के अलग संस्करणों instantiating नहीं किया जाना चाहिए acces परत है, तो आप है कि नियंत्रण में। आपके द्वारा पोस्ट किया गया Psuedo कोड हालांकि पढ़ने के लिए वास्तव में मुश्किल है।

सवाल यह है कि, आपकी डेटा एक्सेस परत क्या है, और वहां कितना है? यह आपके द्वारा किए गए कार्यों का एक अच्छा सा हिस्सा निर्धारित करने जा रहा है। यदि आप एक फ़ाइल के लिए उत्सुक हैं तो मुझे लगता है कि आपने जो लिखा है वह ठीक है, और यदि आपको इसे अपने सिस्टम में अन्य नियंत्रकों के साथ साझा करने की आवश्यकता है, तो आइटम को सिंगलटन (शटर) में लपेटना संभव है।

यदि आप वास्तव में ऑर्डर प्रोसेसिंग कर रहे हैं और डेटाबेस पर वापस आ रहे हैं, तो मुझे व्यक्तिगत रूप से लगता है कि यह एक ओआरएम देखने का समय है। ये पैकेज आपके लिए सीआरयूएम पहलुओं को संभालेगा और आपके द्वारा बनाए रखने वाले सामानों की संख्या को कम करेगा।

मेरा $ .02, और एक बेहतर उदाहरण देखने के बाद मैं अपने उत्तर को संशोधित करने का अधिकार सुरक्षित रखता हूं।

4

मुझे लगता है कि इस उत्कृष्ट पुस्तक में सूचीबद्ध कई विकल्प हैं: Patterns of Enterprise Application Architecture। कुछ पैटर्न है कि आप करने के लिए रुचि का हो सकता:

+0

मैं इसे दूंगा पढ़ें। धन्यवाद दोस्त! –

0

मैं वीबी विस्तृत विवरण देने में नहीं कर सकते क्योंकि मैं नहीं कर रहा हूँ एक वीबी डेवलपर, लेकिन:

आप जो कर रहे हैं वह एक अच्छी तरह से है अच्छी परत स्थापित की, जीयूआई/प्रस्तुति परत को डेटा परत से अलग करना। जीयूआई घटना विधियों में वास्तविक एप्लिकेशन कोड सहित एक (दुख की बात है कि अच्छी तरह से स्थापित) खराब अभ्यास है।

आपका नियंत्रक वर्ग bridge pattern जैसा दिखता है जो यह भी एक अच्छा विचार है कि दोनों परतें इसके बारे में अन्य जानकारी के बिना अपना फॉर्म बदलने में सक्षम होंगी।

आगे बढ़ें!

0

यह एक अच्छा अभ्यास है - खासकर जब आप उस बिंदु पर पहुंच जाते हैं जहां नियंत्रक को अंतर्निहित डीएएल को सरल प्रतिनिधिमंडल से अधिक करने की आवश्यकता होगी।

संबंधित मुद्दे