2010-09-15 8 views
6

मेरे पास क्लाइंट पंजीकरण के लिए एक इंटरफ़ेस है जिसे IRegistrationService कहा जाता है। इसमें पंजीकरण नामक एक विधि शामिल है और इसे कक्षा पंजीकरण सेवा के माध्यम से कार्यान्वित किया जाता है। अगर मैं डिलीट, अपडेट, उदाहरण के लिए पुनर्प्राप्त करने के तरीकों के बारे में चाहता हूं, तो क्या मैं प्रत्येक क्रिया के लिए एक अलग इंटरफ़ेस बनाउंगा जैसे IDeletionService, IUpdateService, IRetrieveService या केवल सभी विधियों को IRegistrationService में डाल दें। कारण मैं यह पूछता हूं क्योंकि यही वह सिद्धांत है जो विशेष रूप से एसआरपी सिद्धांत पूछता है।सोलिड सिद्धांतों का पालन करने की कोशिश करते समय मुझे अपने वर्ग के डिजाइन के साथ कितना दानेदार मिलता है?

उत्तर

2

एकल जिम्मेदारी सिद्धांत बताते हुए एक तरीका यह है कि एक वर्ग में बदलने का केवल एक कारण होना चाहिए। इसका जरूरी अर्थ यह नहीं है कि यह केवल एक चीज करता है, बल्कि यह केवल जिम्मेदारी के एक क्षेत्र से संबंधित है।

तो पंजीकरण के लिए लोगों के बारे में सभी को जानना ठीक है, और इसमें पंजीकरण को पुनर्प्राप्त करने, अद्यतन करने, पुनर्प्राप्त करने में शामिल होना शामिल है। यदि पंजीकरण प्रक्रिया में परिवर्तन की प्रक्रिया बदलती है (उदाहरण के लिए आप तय करते हैं कि सभी नए या अपडेट किए गए उपयोगकर्ताओं को ईमेल भेजा गया है)। हालांकि, पंजीकरण ईमेल कैसे भेजा जाता है, इसके कार्यान्वयन विवरण इस सेवा में शामिल नहीं हैं - यह दूसरा कारण होगा कि वर्ग बदल सकता है (उदाहरण के लिए आप महसूस करते हैं कि आप स्थानीय रूप से या बाहरी रूप से बाहरी एसएमटीपी सर्वर के माध्यम से ईमेल भेजना चाहते हैं ईमेल के बजाय एसएमएस, आदि)।

+1

तो आपके उत्तर को छोड़कर, पंजीकरण रजिस्टर उपयोगकर्ता, DeleteUser, UpdateUser विधियों को समाहित करता है, लेकिन अगर मैं ईमेल या एसएमएस के माध्यम से उपयोगकर्ताओं को अधिसूचनाएं भेजना चाहता हूं, तो शायद मेरे पास एक और कक्षा होनी चाहिए जिसे उपयोगकर्ता नोटिफिकेशन की तरह कुछ कहा जाता है जो संदेश को संभालता है। क्या मैंने आपको सही ढंग से समझा? एक बात जो आपने कहा वह अभी भी मुझे फेंक देता है कि वर्ग एक काम नहीं करता है, यह जिम्मेदारी के क्षेत्र से संबंधित है। क्षेत्र से आपका क्या मतलब है? आपके पास कोई उदाहरण है? धन्यवाद – Xaisoft

+2

अधिकांश सोलिड सिद्धांत बहुत ठोस हैं, लेकिन एसआरपी कुछ हद तक व्यक्तिपरक है। सक्षम डेवलपर्स की राय अलग-अलग जिम्मेदारियों के आधार पर भिन्न हो सकती है, या जैसे ही जैकबैम ने इसे जिम्मेदारी का "क्षेत्र" रखा है। उस ने कहा, मुझे विश्वास है कि आपकी समझ उपयोगकर्ता द्वारा प्रदान किए गए उपयोगकर्ता नोटेशन उदाहरण के आधार पर सही है। शायद एसआरपी को इसका स्पष्ट उल्लंघन करने के बारे में सोचकर सबसे अच्छा समझाया जा सकता है: एक वर्ग जो ग्राहकों को पंजीकृत करने के तरीकों को प्रदान करता है, उनकी बंधक ब्याज की गणना करता है, और अगर उन्हें भुगतान करने में देर हो जाती है तो उन्हें सूचित करें कि कई जिम्मेदारियां होंगी। –

+0

सहमत हैं कि जिम्मेदारी के क्षेत्र को परिभाषित करना मुश्किल हो सकता है। और सहमति व्यक्त की कि उपयोगकर्ता अधिसूचना एक अलग वर्ग होगी। इसके बारे में सोचने का एक तरीका यह है कि एक वर्ग को कैसे काम करना चाहिए, यह पता लगाने के दौरान आपके पास वार्तालाप के प्रकार के बारे में सोचना होगा। पंजीकरण प्रक्रिया में बदलावों के बारे में सोचने के लिए आपके पास एक प्रकार की वार्तालाप (शायद आपके ग्राहक के साथ), और किसी अन्य व्यक्ति के साथ एक अलग बातचीत के बारे में सोचने के लिए, कहें, पंजीकरण करने के दौरान कनेक्ट करने के लिए किस डेटाबेस ड्राइवर का उपयोग करना है। एक वर्ग को उन दोनों चीजों के बारे में नहीं पता होना चाहिए। –

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

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