एसओएलआईडी का पालन करते समय, क्या दो अलग-अलग जिम्मेदारियों को पढ़ने और लिखने वाली फाइलें हैं?


13

मैं सिर्फ SOLID का पता लगाने के लिए शुरू कर रहा हूं और मैं अनिश्चित हूं अगर फाइलों से पढ़ना और फाइलों से लिखना एक ही जिम्मेदारी है।

लक्ष्य एक ही फ़ाइल प्रकार है; मैं अपने आवेदन में .pdf लिखना और पढ़ना चाहता हूं।

यदि कोई फर्क पड़ता है तो आवेदन पायथन में है।

जवाबों:


24

पढ़ने और लिखने के कार्यान्वयन की संभावना अत्यधिक सामंजस्यपूर्ण होने की उच्च संभावना है। अगर एक बदल जाएगा, तो दूसरा होगा। उच्च सामंजस्य एक एकल जिम्मेदारी का एक मजबूत संकेत है और एकल जिम्मेदारी सिद्धांत हमें बताता है कि उन्हें एक ही कक्षा में एक साथ रखा जाना चाहिए। यदि उन ऑपरेशनों में कम सामंजस्य है, तो संभावना है कि उन्हें विभाजित करने से स्थिरता में सुधार होता है।

यदि, हालांकि, ऐसे उपभोक्ता हैं जो केवल लिखने के बिना डेटा पढ़ते हैं, या केवल पढ़ने के बिना लिखते हैं, तो यह एक संकेत है कि इंटरफ़ेस परिप्रेक्ष्य से आपको इन कार्यों को अलग करना चाहिए, जैसा कि इंटरफ़ेस अलगाव सिद्धांत द्वारा निर्धारित किया गया है। इसका मतलब यह है कि उपभोक्ताओं को दो इंटरफेस को परिभाषित करना चाहिए जिस पर वे निर्भर हो सकते हैं, जबकि Fileवर्ग दोनों इंटरफेस को लागू करेगा।


8

जब आप किसी ऑब्जेक्ट को डिजाइन करने के लिए SOLID सिद्धांत लागू करते हैं, तो आप फ़ाइल पढ़ने और लिखने को एक जिम्मेदारी मान सकते हैं - लगातार डेटा के साथ काम करते हैं

हालाँकि, आपको फ़ाइल पढ़ने और लिखने को एक ही विधि या फ़ंक्शन में नहीं रखना चाहिए।


5

अधिकांश अन्य जवाबों से यह प्रतीत होता है कि आपके प्रश्न में एक महत्वपूर्ण जानकारी गायब है - आपने हमें यह नहीं बताया कि आप जिस दस्तावेज़ को पढ़ने और लिखने जा रहे हैं वह कैसे संबंधित है!

क्या आपके एप्लिकेशन में "डॉक्यूमेंट ऑब्जेक्ट" जैसा कुछ है और वह पहले एक पीडीएफ फाइल में लिखता है, और फिर बाद में उसी फाइल को एक समान डॉक्यूमेंट ऑब्जेक्ट में दोबारा पढ़ता है? या इसके विपरीत, यह पीडीएफ को एक दस्तावेज़ में पढ़ता है, इसमें कुछ संशोधन करता है और उसी दस्तावेज़ को फिर से एक नए पीडीएफ में सहेजता है? फिर पढ़ना और लिखना एक जिम्मेदारी के रूप में देखा जाना चाहिए। यदि आपका आवेदन "पीडीएफ संपादक" घटक या "पीडीएफ हेरफेर टूलकिट" जैसा कुछ है, तो यह मामला हो सकता है।

हालाँकि, यदि आपके एप्लिकेशन का एक हिस्सा कुछ पीडीएफ फाइलें बनाता है, उदाहरण के लिए, रिपोर्टिंग घटक में, और आपके एप्लिकेशन का एक अन्य असंबंधित हिस्सा अलग-अलग पीडीएफ (उदाहरण के लिए, एक खोज इंजन के लिए एक मेल अनुलग्नक मूल्यांकनकर्ता), और आंतरिक प्रतिनिधित्व को पढ़ता है उन बाद वाले पीडीएफ में पहले उपयोग के मामले में कुछ भी सामान्य नहीं है, फिर वे कार्य अलग-अलग जिम्मेदारियां हैं।

विशेष रूप से पीडीएफ के लिए, दूसरा उपयोग मामला वह मामला है जिसे मैंने विभिन्न प्रकार के अनुप्रयोगों में बहुत अधिक बार देखा है। वहाँ बहुत अधिक पुस्तकालय / घटक हैं जो केवल पीडीएफ निर्माण का समर्थन करते हैं, और केवल एक बहुत छोटी संख्या जो पीडीएफ पढ़ने का भी समर्थन करते हैं। यदि आप पीडीएफ फाइलों को बनाने के लिए एक लाइब्रेरी का उपयोग करने जा रहे हैं, और पीडीएफ पढ़ने के लिए पूरी तरह से अलग हैं, तो यह स्पष्ट होना चाहिए कि पीडीएफ पढ़ना और लिखना अलग-अलग जिम्मेदारियां होंगी।


यह स्टीवन के जवाब के समान है, लेकिन यह एक ठोस उदाहरण प्रदान करता है।
डेविड नोव 18'16

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

ठोस उदाहरण उत्कृष्ट हैं। मैं सिर्फ विश्लेषण के लिए तुलना कर रहा था। बहुत बढ़िया जवाब!
डेविड

3

( रॉबर्ट सी। मार्टिन ) के अनुसार एक जिम्मेदारी उन कार्यों का एक समूह है जो एक विशेष अभिनेता की सेवा करता है।

एक अभिनेता को किसी दिए गए उत्तरदायित्व के परिवर्तन का एकमात्र स्रोत होना चाहिए (परिवर्तन का केवल एक कारण होना चाहिए)।

आपके मामले में आपको पहले अभिनेताओं को पहले कदम के रूप में परिभाषित करना चाहिए, फिर प्रश्न पूछें:। क्या ऐसे अभिनेता हैं जो केवल फाइलों को पढ़कर और अन्य लिखकर रुचि रखते हैं?

अगर ऐसा है तो फाइल पढ़ना और लिखना दो अलग-अलग ज़िम्मेदारियाँ हैं। क्योंकि परिवर्तनों के कई स्रोत होंगे (कई अभिनेता पढ़ने के तर्क और लेखन के लिए एक ही चीज़ को बदलने के लिए कह सकते हैं)।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.