2011-03-29 8 views
5

मैं कोड लिख रहा हूं जो एक स्ट्रिंग्स के मानचित्र से UserProfile ऑब्जेक्ट बनाता है। फिलहाल मैं कई Builder वस्तुओं है कि उपयोगकर्ता प्रोफ़ाइल के उन भागों, कुछ इस तरह का निर्माण में कोड को विभाजित कर रहा हूँ:बिल्डरों की गतिशील सूची को कैसे कार्यान्वित करना चाहिए?

public UserProfile getUserProfile(int id) { 
    Map<String, String> data = this.service.getUserProfileData(int id); 
    UserProfile profile = userProfileBuilder.build(data); 
    profile.setMarketingPreferences(marketingPreferencesBuilder.build(data)); 
    profile.setAddress(addressBuilder.build(data)); 

    ... 

    return profile; 
} 

यह बिल्डर की एक सूची है करने के लिए सक्षम होने के लिए अच्छा होगा ताकि बजाय वस्तुओं मैं कक्षा को छूए बिना OCP को तोड़ने के बिना गतिशील रूप से अतिरिक्त बिल्डर्स जोड़ सकते हैं।

शायद कुछ इस तरह, बजाय:

private List<ProfileBuilder> builders; 

public void buildBuilders() { 
    this.builders = new ArrayList<ProfileBuilder>(); 
    builders.add(new BasicDetailsBuilder()); 
    builders.add(new AddressBuilder()); 
    builders.add(new MarkettingPreferencesBuilder()); 

    ... 

} 

public UserProfile getUserProfile(int id) { 
    Map<String, String> data = this.service.getUserProfileData(int id); 
    UserProfile profile = new UserProfile(); 
    for(ProfileBuilder builder : this.builders) { 
    builder.build(profile, data); 
    } 

    return profile; 
} 

आप इस दृष्टिकोण के साथ कोई समस्या देख सकते हैं? क्या यह कड़ाई से बिल्डर डिजाइन पैटर्न है?

उत्तर

1

उपयोग बिल्डर/बिल्डरों निर्माण UserProfile जटिल

है केवल यदि आप केवल UserProfile में क्षेत्रों के लिए मानचित्र से डेटा को फिर से लिखने चाहते हैं और आप UserProfile में कई क्षेत्रों है शायद बेहतर समाधान हो जाएगा कुछ ऐसा: प्रतिबिंब और मैपिंग: मानचित्र से कुंजी -> उपयोगकर्ता प्रोफाइल में सेटर विधि

+0

प्रतिक्रिया के लिए धन्यवाद। UserProfile का निर्माण जटिल हो सकता है, कक्षा मैपिंग के साथ बहुत लंबी हो रही है। उपरोक्त एक सरलीकरण भी है, मानचित्र में कुछ प्रविष्टियां अधिक मानचित्र हो सकती हैं। क्या कोई एपीआई है जो आपको प्रस्तावों के अनुसार स्वचालित रूप से बीन्स के मूल्यों को मैप करने की अनुमति देती है? –

+0

मैं किसी भी से परिचित नहीं हूं लेकिन जेएक्सबी, एक्स्ट्रीम और कास्टर जो आप जावा क्लास – smas

+0

पर एक्सएमएल मैपिंग के साथ करना चाहते हैं दुर्भाग्य से मैं जिस उपयोगकर्ता सेवा का उपयोग कर रहा हूं वह उपयोगकर्ता प्रोफ़ाइल डेटा पुनर्प्राप्त करता है, एक्सएमएल नहीं। –

2

यह एक निर्माता से अधिक आगंतुक बन जाता है। आप ऐसा कर सकता है:

interface UserProfileVisitor { 
    public void visit(UserProfile profile, Map<String, String> data); 
} 
+0

वास्तव में आपको लगता है कि यह आगंतुक के लिए उपयोग का मामला क्यों है? मुझे या तो 'उपयोगकर्ता प्रोफाइल' या 'विज़िटर' पदानुक्रम नहीं दिखाई देता है। –

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