मैं बहुत सारे कोड लिखता हूं जिसमें तीन बुनियादी चरण शामिल हैं।
- कहीं से डेटा मिलता है।
- उस डेटा को ट्रांसफॉर्म करें।
- वह डेटा कहीं रख दें।
मैं आमतौर पर तीन प्रकार की कक्षाओं का उपयोग करके समाप्त होता हूं - उनके संबंधित डिजाइन पैटर्न से प्रेरित।
- कारखानों - कुछ संसाधन से एक वस्तु का निर्माण करने के लिए।
- मध्यस्थ - कारखाने का उपयोग करने के लिए, परिवर्तन का प्रदर्शन करें, फिर कमांडर का उपयोग करें।
- कमांडर - उस डेटा को कहीं और लगाने के लिए।
मेरी कक्षाएं मेरे लिए काफी छोटी हैं, अक्सर एक ही (सार्वजनिक) पद्धति होती है, जैसे डेटा प्राप्त करना, डेटा बदलना, काम करना, डेटा सहेजना। इससे वर्गों का प्रसार होता है, लेकिन सामान्य रूप से अच्छी तरह से काम करता है।
जहां मैं संघर्ष करता हूं जब मैं परीक्षण करने आता हूं, तो मैं अंत में कसकर युग्मित परीक्षण करता हूं। उदाहरण के लिए;
- फैक्टरी - डिस्क से फाइल पढ़ता है।
- कमांडर - डिस्क पर फाइलें लिखता है।
मैं एक के बिना एक परीक्षण नहीं कर सकता। मैं डिस्क पढ़ने / लिखने के लिए अतिरिक्त 'टेस्ट' कोड भी लिख सकता था, लेकिन फिर मैं खुद को दोहरा रहा हूं।
.Net को देखते हुए, फ़ाइल वर्ग एक अलग दृष्टिकोण लेता है, यह जिम्मेदारियों (मेरे) कारखाने और कमांडर को एक साथ जोड़ता है। इसमें एक ही जगह पर Create, Delete, Exists, और Read सभी के लिए फ़ंक्शन हैं।
क्या मुझे .Net और संयोजन के उदाहरण का अनुसरण करना चाहिए - विशेष रूप से बाहरी संसाधनों से निपटने के दौरान - मेरी कक्षाएं एक साथ? यह कोड अभी भी युग्मित है, लेकिन यह अधिक जानबूझकर है - यह परीक्षणों के बजाय मूल कार्यान्वयन पर होता है।
यहाँ मेरा मुद्दा यह है कि मैंने सिंगल रिस्पॉन्सिबिलिटी प्रिंसिपल को कुछ हद तक अधिक लापरवाही से लागू किया है? मेरे पास पढ़ने और लिखने के लिए अलग-अलग कक्षाएं हैं। जब मेरे पास एक संयुक्त वर्ग हो सकता है जो किसी विशेष संसाधन, जैसे सिस्टम डिस्क से निपटने के लिए जिम्मेदार है।
Looking at .Net, the File class takes a different approach, it combines the responsibilities (of my) factory and commander together. It has functions for Create, Delete, Exists, and Read all in one place.
- ध्यान दें कि आप "जिम्मेदारी" का सामना "करने की चीज़" के साथ कर रहे हैं। एक जिम्मेदारी "चिंता का क्षेत्र" की तरह है। फ़ाइल वर्ग की जिम्मेदारी फ़ाइल संचालन कर रही है।
File
C # से आपकी लाइब्रेरी में एक महत्वपूर्ण बिंदु यह है कि हम सभी जानते हैं कि File
कक्षा सिर्फ एक मुखौटा हो सकती है, सभी फ़ाइल संचालन को एक ही स्थान पर डालकर - कक्षा में, लेकिन आंतरिक रूप से आपके लिए समान पढ़ने / लिखने वाली कक्षाओं का उपयोग कर सकता है। वास्तव में फ़ाइल हैंडलिंग के लिए अधिक जटिल तर्क शामिल हैं। ऐसा वर्ग ( File
) अभी भी एसआरपी का पालन करेगा, क्योंकि फाइलसिस्टम के साथ वास्तव में काम करने की प्रक्रिया एक और परत के पीछे अमूर्त हो जाएगी - सबसे अधिक एक एकीकृत इंटरफ़ेस के साथ होने की संभावना है। यह नहीं कह रहा है कि यह मामला है, लेकिन यह हो सकता है। :)