2015-08-22 3 views
6

यहाँ मेरी बिल्डर इंटरफेस है:बिल्डर डिजाइन पैटर्न: एक्सेस करना/करने के लिए मॉडल डेटा पासिंग/कंक्रीट कक्षाओं में

public interface IContainerBuilder { 
    void SetSections(); 
    void SetSides(); 
    void SetArea(); 
    WebControl GetContainer(); 
} 

और ये मेरे ConcreteBuilder है:

public class SingleContainerBuilder:BaseProperties, IContainerBuilder { 
    Panel panel = new Panel(); 
    public void SetSections() { 
    //panel.Height = value coming from model 
    //panel.Width = value coming from model 
    } 
    public void SetSides() { 
    //panel.someproperty = //value coming from model, 
    //panel.someotherproperty = //value coming from model, 
    } 
    public void SetArea() { 
    throw new NotImplementedException(); 
    } 
    public System.Web.UI.WebControls.WebControl GetContainer() { 
    return panel; 
    } 
} 

और निदेशक यहाँ है:

public class ContainerBuilder { 
    private readonly IContainerBuilder objBuilder; 
    public Builder(IContainerBuilder conBuilder) { 
    objBuilder = conBuilder; 
    } 
    public void BuildContainer() { 
    objBuilder.SetArea(); 
    objBuilder.SetSections(); 
    objBuilder.SetSides(); 
    } 
    public WebControl GetContainer() { 
    return this.objBuilder.GetContainer(); 
    } 
} 

और वह मैं इसे कैसे डिफ़ॉल्ट पृष्ठ से बोल रहा हूँ है:

var conBuilder = new ContainerBuilder(new SingleContainerBuilder()); 
conBuilder.BuildContainer(); 
var container = conBuilder.GetContainer(); 

अब समस्या/भ्रम है कि मैं ठोस वर्गों में मॉडल डेटा कैसे पास करूं? जिस कारण से मैं उलझन में हूं/अटक गया हूं, वहां विभिन्न कंटेनर की संख्या हो सकती है (20-30 से अधिक हो सकती है)। क्या प्रत्येक अलग-अलग प्रकार के कंटेनर को मॉडल से डेटा लेना और पकड़ना है या इसके लिए कोई बेहतर तरीका है?

दूसरी बात जो मैं उलझन में हूं, मेरा मॉडल एक अलग पुस्तकालय में है। क्या मुझे अपने वेब प्रोजेक्ट में मॉडल की एक प्रति बनाने की आवश्यकता है और उस मास्टर मॉडल से अपने स्थानीय मॉडल को पॉप्युलेट करना है, या क्या मुझे सीधे कंक्रीट क्लास प्रॉपर्टीज के लिए मास्टर मॉडल से पूछताछ करनी चाहिए? जैसा कि आप देख सकते हैं, मेरे सिंगलकॉन्टेनर में बेसप्रोपर्टीज शामिल हैं, जो कि पहले से ही मास्टर मॉडल में मौजूद गुणों की स्थानीय घोषणा है। मैं स्थानीय मॉडल के बिंदु को नहीं देखता या समझता हूं और मुझे यकीन नहीं है कि मैं यहां हूं या नहीं।

क्षमा करें मैं डिजाइन पैटर्न के लिए नया हूँ।

किसी भी मदद वास्तव में सराहना की जाएगी,

धन्यवाद

उत्तर

2

मैंने एक लाइब्रेरी बनाई है जिसे निर्माता के प्रारंभ से पहले बुलाया गया है, मैं उस कंटेनर की 'कुंजी' भेज रहा हूं जिसे मुझे लाइब्रेरी स्थिर विधि की आवश्यकता है और लाइब्रेरी मुझे 'कुंजी' के आधार पर आवश्यक डेटा देता है और फिर मैं उस वस्तु को निर्माता को पास करता हूं और वहां सामान करता हूं। इससे पहले मुझे निर्माण करने के लिए आवश्यक वस्तुओं को बनाने के लिए कई ऑब्जेक्ट्स पास करना पड़ा था, लेकिन अब कंक्रीट कक्षाओं में कई 'डेटा ऑब्जेक्ट्स' पास करने और कंक्रीट क्लास को अन्य वर्ग पर निर्भर करने के बजाय, ठोस वर्गों को केवल एक 'डेटा ऑब्जेक्ट' की आवश्यकता होती है जिसमें सभी जानकारी होती है मुझे जरूरत है।

तो मेरी कॉल इस तरह दिखता है अब

var data = ContainerData.Getdata(key);//Call to library 

और उसके बाद बिल्डर को अंतिम कॉल

var conBuilder = new ContainerBuilder(new SingleContainerBuilder(data)); 
ठोस वर्ग के निर्माता बेशक

है 'डेटा' प्रकार स्वीकार करने के लिए बदल दिया गया है

0

@Does कंटेनर में से प्रत्येक के विभिन्न प्रकार के मॉडल से जाने के लिए और हड़पने डेटा गया है या इसके लिए एक बेहतर तरीका है?

वर्णित जीओएफ पुस्तक की तरह, यह एक ठोस समाधान होगा। तो आप प्रत्येक अलग प्रकार के निर्माता के अपने ठोस प्रकार के लिए मिला है।

मॉडलों से विनिर्देश प्रदान करने के लिए एक कार्य आसपास हो सकता है ताकि आप मॉडल के समूह के लिए एक निर्माता का उपयोग कर सकें। सावधान रहें: इस तरह मॉडल को buidlers को जानने की जरूरत है और यह एक साफ तरीका नहीं है!

@ क्या प्रत्येक अलग-अलग प्रकार के कंटेनर को मॉडल से डेटा लेना और पकड़ना है या इसके लिए कोई बेहतर तरीका है?

किसी भी मामले में कंटेनर को सीधे मॉडल पता होना चाहिए। निर्माता को यह करना चाहिए। बिल्डर पैटर के बारे में बात है। तो निर्माता को पता होना चाहिए कि मॉडल से डेटा कैसे प्राप्त करें। उस मामले में डेटा एकत्र करें जिसे वह एक भाग बनाने के लिए बुलाया जाता है।

बिल्डर पैटर्न इरादा का पहला भाग: "अपने प्रतिनिधित्व से एक Complexe वस्तु के निर्माण के अलग ताकि एक ही निर्माण की प्रक्रिया अलग प्रतिनिधित्व बना सकते हैं"

@Do मैं एक प्रतिलिपि बनाने की जरूरत मेरे वेब प्रोजेक्ट में मॉडल का और उस मास्टर मॉडल से मेरे स्थानीय मॉडल को पॉप्युलेट करता है, या क्या मुझे सीधे कंक्रीट क्लास प्रॉपर्टीज के लिए मास्टर मॉडल से पूछताछ करनी चाहिए?

मैं आपकी परियोजना में नहीं हूं, लेकिन मुझे लगता है कि आपको मास्टर डेटा की प्रतियां बनाना नहीं चाहिए जो आमतौर पर प्रवण होता है। इसलिए निर्माता को आवश्यकता डेटा से अधिक होने की संभावना मिलनी चाहिए।

+0

उत्तर @ratnim के लिए धन्यवाद। मैं मॉडल भाग से सहमत हूं। असल में, मैंने यहां चर्चा के विचार [लिंक] (http://stackoverflow.com/questions/696027/design-pattern-builder) का पालन किया है। 'डेटा ऑब्जेक्ट' का पालन करने का विचार अब तक मेरे लिए व्यवहार्य समाधान लग रहा था। लेकिन अगर मैं किसी भी अनुभवी गुरु का उपयोग कर रहा हूं और मुझे मार्गदर्शन कर सकता हूं तो कोई भी बेहतर दृष्टिकोण है, तो मैं इस खोज को खुला रखता हूं – Angloos

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