मैं कोड लिख रहा हूं जो एक स्ट्रिंग्स के मानचित्र से 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;
}
आप इस दृष्टिकोण के साथ कोई समस्या देख सकते हैं? क्या यह कड़ाई से बिल्डर डिजाइन पैटर्न है?
प्रतिक्रिया के लिए धन्यवाद। UserProfile का निर्माण जटिल हो सकता है, कक्षा मैपिंग के साथ बहुत लंबी हो रही है। उपरोक्त एक सरलीकरण भी है, मानचित्र में कुछ प्रविष्टियां अधिक मानचित्र हो सकती हैं। क्या कोई एपीआई है जो आपको प्रस्तावों के अनुसार स्वचालित रूप से बीन्स के मूल्यों को मैप करने की अनुमति देती है? –
मैं किसी भी से परिचित नहीं हूं लेकिन जेएक्सबी, एक्स्ट्रीम और कास्टर जो आप जावा क्लास – smas
पर एक्सएमएल मैपिंग के साथ करना चाहते हैं दुर्भाग्य से मैं जिस उपयोगकर्ता सेवा का उपयोग कर रहा हूं वह उपयोगकर्ता प्रोफ़ाइल डेटा पुनर्प्राप्त करता है, एक्सएमएल नहीं। –