मैं उन वर्गों में से एक के साथ एक बहुत ही खास स्थिति में हूं जिसमें मैं कोडिंग कर रहा हूं। new User()
: कई स्थितियों में, जहां मैं सिर्फ प्रकार User
के एक खाली वस्तु की जरूरत है और इसलिए सिर्फ डिफ़ॉल्ट निर्माता का उपयोग कर इसे बनाने देखते हैं मेरी कोड के भीतरडिज़ाइन पैटर्न - केवल कुछ परिस्थितियों में ऑब्जेक्ट विशेषताओं को कैसे लागू करें (बिल्डर पैटर्न, निर्भरता इंजेक्शन)
public class User {
private long id; // + getters and setters
private boolean isDeletable; // + getters and setters
private String name; // + getters and setters
private String password; // + getters and setters
private String email; // + getters and setters
private String authenticationRealm; // + getters and setters
private String displayName; // + getters and setters
private Date deletedDate; // + getters and setters
}
: मैं इस वर्ग User
कहा जाता है कि इस तरह दिखता है।
हालांकि, मेरे पास CreateUserRequest
नामक एक और वर्ग है जो सर्वर में उपयोगकर्ता को बनाने के लिए एक आरईएसटी अनुरोध मॉडल करता है। न्यूनतम पेलोड में name
, password
, email
, और authenticationRealm
JSON प्रारूप में भेजे गए गुणों में अवश्य होना चाहिए।
public CreateUserRequest(User user) {
if(user.getName() == null || user.getPassword() == null || user.getEmail() == null || user.getAuthenticationRealm() == null)
throw new RuntimeException("Not enough attributes in User object. Minimum: name, password, e-mail and authentication realm.");
}
यह ठीक काम कर रहा है लेकिन कुछ खुजली है ... मैं एक सुरक्षित तरीके से इस लागू करने के लिए करना चाहते हैं:
अभी मैं अनुरोध के निर्माता में इन मानकों के लिए देख कर इसकी हैंडलिंग हूँ , ताकि कोड उन अपवादों को लागू कर सके जो अपवाद को फेंकने की कोई संभावना नहीं है।
मुझे लगता है कि डिज़ाइन पैटर्न के साथ ऐसा करने का एक बेहतर तरीका होना चाहिए। मैंने UserRequestBuilder
वर्ग बनाने का विचार किया, लेकिन यह संभवतः build()
विधि में अपवाद फेंकने का भी अर्थ होगा (अन्यथा, क्या कोई तरीका है कि मैं गारंटी दे सकता हूं कि गुण build()
से पहले आबादी वाले हैं?)। निर्भरता इंजेक्शन भी एक संभावना की तरह लगता है, लेकिन मुझे यकीन नहीं है कि मैं इसे इस विशेष उदाहरण में कैसे रखूंगा ...
कोई विचार?
एक अलग ऑब्जेक्ट की तरह लगता है, एक CreateUser ऑब्जेक्ट शायद उसमें एक निर्माता है और आपूर्ति किए गए मानों को मान्य करता है। किसी भी कारण से उन्हें एक ही कक्षा के आधार पर होना चाहिए क्योंकि वे दो अलग-अलग कार्य कर रहे हैं? – dbugger
मेरे तत्काल विचार उपयोगकर्ता वर्ग पर एक नया isValidUserRequest() विधि जोड़ देंगे। यह सोचकर कि उपयोगकर्ता वर्ग को खुद को तय करना चाहिए यदि यह वैध है या अनुरोध में उपयोग के लिए नहीं है। –
टिप्पणी @dbugger के लिए धन्यवाद। हां - कई आरईएसटी कॉल या तो 'उपयोगकर्ता' वर्ग के समान गुणों के साथ जेएसओएन ऑब्जेक्ट्स का उत्पादन या उपभोग करते हैं (यानी उपयोगकर्ता वर्ग रिमोट इकाई का प्रतिनिधित्व करता है)। कक्षाएं वास्तव में विभिन्न कार्यों का प्रदर्शन नहीं कर रही हैं। 'CreateUserRequest' क्लास एक आरईएसटी कॉल बनाता है जो JSON प्रारूप में अपने पेलोड में' उपयोगकर्ता 'ऑब्जेक्ट पास करता है। – Phil