जब मेरे पास बहुत अधिक डेटा होता है जिसे मान्य करने की आवश्यकता होती है, तो क्या मुझे सत्यापन के एकमात्र उद्देश्य के लिए एक नया वर्ग बनाना चाहिए या क्या मुझे इन-विधि सत्यापन के साथ रहना चाहिए?
मेरा विशेष उदाहरण एक टूर्नामेंट और एक घटना / श्रेणी वर्ग पर विचार करता है: Tournament
और Event
, जो एक खेल टूर्नामेंट का मॉडल बनाते हैं और प्रत्येक टूर्नामेंट में एक या कई श्रेणियां होती हैं।
इन वर्गों में मान्य करने के लिए सभी प्रकार की चीजें हैं: खिलाड़ियों को खाली होना चाहिए, अद्वितीय होना चाहिए, प्रत्येक खिलाड़ी को जितने मैच खेलना चाहिए, प्रत्येक मैच में जितने खिलाड़ी होंगे, पूर्वनिर्धारित मैचअप, और वास्तव में बहुत बड़ा वगैरह शामिल है। जटिल नियम।
कुछ ऐसे हिस्से भी हैं जिन्हें मुझे समग्र रूप से मान्य करने की आवश्यकता है, जैसे कि कक्षाएं एक-दूसरे के साथ कैसे एकीकृत होती हैं। उदाहरण के लिए, कैन की एकात्मक मान्यता Player
सिर्फ ठीक हो सकती है, लेकिन अगर किसी घटना में एक ही खिलाड़ी दो बार है, तो यह एक सत्यापन त्रुटि है।
तो इस बारे में कैसे ?: मैं अपने मॉडल वर्गों के बसने और डेटा जोड़ने के लिए इसी तरह के तरीकों का उपयोग करते समय बिल्कुल किसी भी पूर्व-जांच के बारे में भूल जाता हूं और इसके बजाय मैं सत्यापन कक्षाओं को संभालता हूं।
इसलिए हम कुछ ऐसा करना होगा EventValidator
एक साथ Event
एक सदस्य के रूप में, और एक validate()
विधि है कि पूरी वस्तु की पुष्टि करता है, के साथ साथ विलक्षण तरीकों सभी सदस्यों के नियमों को मान्य करने के।
फिर, एक वैध वस्तु को तत्काल करने से पहले, मैं अवैध मूल्यों को रोकने के लिए मान्यता निष्पादित करूंगा।
क्या मेरा डिजाइन सही है? क्या मुझे कुछ अलग करना चाहिए?
इसके अलावा, क्या मुझे बूलियन रिटर्न सत्यापन विधि का उपयोग करना चाहिए? या सिर्फ एक अपवाद फेंक दें यदि सत्यापन विफल हो जाता है? ऐसा लगता है कि सबसे अच्छा विकल्प बूलियन वापसी के तरीके होंगे और उदाहरण के लिए, जब वस्तु को तत्काल किया जाता है, तो अपवाद को फेंक दें:
public Event() {
EventValidator eventValidator = new EventValidator(this);
if (!eventValidator.validate()) {
// show error messages with methods defined in the validator
throw new Exception(); // what type of exception would be best? should I create custom ones?
}
}