मैं निर्भरता इंजेक्शन के लिए गुइस का उपयोग करके एक नया ऐप लिख रहा हूं, और विशेषता सत्यापन के लिए अमरूद की पूर्व शर्त।फैक्टरी पैटर्न: एक बीन (गुइस/अमरूद) बनाते समय इनपुट को मान्य करना
मैं बाहरी इनपुट के आधार पर सेम बनाने के लिए कारखाने पैटर्न का उपयोग कर रहा हूं। सवाल यह है कि, इनपुट को प्रमाणित करने का पसंदीदा तरीका क्या होगा? (रख-रखाव, स्पष्टता, आदि के संदर्भ में)
के इन कक्षाओं मान लेते हैं:
Bean.java
public interface Bean {
public Object getFoo();
}
BeanImpl.java
public class BeanImpl implements Bean {
private final Object foo;
public BeanImpl(Object param) {
foo = param;
}
@Override
public String getFoo() {
return foo;
}
}
मैं यह देखना चाहते हैं कि "param" के लिए "foo" का वैध मान है:
Preconditions.checkArgument(SomeValidator.isValid(param), "Bad param: %s!", param);
मुझे यह कहां करना चाहिए और क्यों?
- बीनइम्पल के निर्माता में? (मुझे यकीन नहीं है कि क्यों कन्स्ट्रक्टर में चेक जोड़ना एक बुरा विचार है।)
- BeanFactory.create (param) को कॉल करने से पहले? (भयानक कोड डुप्लिकेशन की तरह लगता है।)
- कुछ गिसिस तंत्र के माध्यम से मुझे अनजान है?
+1। मैं यह भी मानना चाहूंगा कि सत्यापन हल्का वजन है और सिंक्रनाइज़ किया जा सकता है; किसी ऑब्जेक्ट की पुष्टि करने के लिए कोई बाहरी सेवा कॉल (नेटवर्क या डिस्क कॉल सहित) होना चाहिए, जो शायद अपवादों में से एक होगा। (ओपी, आपका अंतर्ज्ञान सही है कि रचनाकारों को विशेष रूप से गुइस में "भारी भारोत्तोलन" नहीं करना चाहिए। सीधे सत्यापन मेरे लिए इस तरह से गिनती नहीं करता है।) –
लंबे और निराश उत्तर के लिए धन्यवाद। ऑब्जेक्ट की मूल बातें पर वापस जाना, युग्मन कहां है, और प्रत्येक पैटर्न वास्तव में क्या समाधान है। मैं कन्स्ट्रक्टर में अपना सत्यापन कोड जोड़ूंगा। (बाहरी सेवा कॉल के बारे में सटीकता के लिए @ जेफ बॉमैन धन्यवाद, यह बिना कहने के चला जाता है, लेकिन अन्य पाठकों को यह एक लाइफसेवर मिल सकता है;)) –
@ सिल्वरक्वेटियर आपकी टिप्पणी के लिए धन्यवाद। मुझे खुशी है कि आपको अपनी समस्या का सही समाधान मिला है। –