मैं कहूंगा कि टीडीडी के साथ शुरू न करें। सामान्य रूप से आर्किटेक्चर रणनीतियों को सीखने में अधिक समय बिताने पर एक सूचित निर्णय लें। TDD आपको उस होमवर्क को छोड़ने नहीं देगा, हालाँकि आप यह मानना शुरू कर सकते हैं।
यहाँ इसके साथ मेरी समस्या है। जब आप कहते हैं कि यह सामान पर बर्बाद होने वाले समय की तरह लगता है जो कि TDDers को कभी नहीं तोड़ेगा तो आप कहेंगे कि आप इसकी सराहना करेंगे जब एक चीज जिस पर आप आश्रितों की एक बड़ी श्रृंखला में अनुमान नहीं लगाते थे उसका पर्दाफाश हो जाता है। जब आप बताते हैं कि आपके ऐप को लिखने से पहले ऐसी चीजों का अनुमान लगाना असंभव है, जो कि उह है ... हम क्यों परीक्षण करते हैं, तो वे आपको बताते हैं कि यह वास्तव में डिज़ाइन के बारे में अधिक है और परीक्षण के काम में नहीं आने के बावजूद।
लेकिन अप्रत्याशित जुड़े निर्भरता की विशाल श्रृंखला गंदे डिजाइन के उत्पाद नहीं हैं?
तो कौन सा है?
यहाँ एक विचार है। डिजाइन पैटर्न से ऑब्जेक्ट-ओरिएंटेड डिज़ाइन के निम्नलिखित दो सिद्धांतों पर विचार करके पहले स्थान पर निर्भरता की विशाल जटिल श्रृंखला नहीं है:
"एक अंतरफलक के लिए कार्यक्रम, एक कार्यान्वयन नहीं"
यह कहना है, आपकी वस्तुओं को यह ध्यान नहीं देना चाहिए कि कॉलिंग कौन कर रहा है या उन्हें कैसे बनाया गया है। केवल यह कि उचित आर्गों को खिलाया गया था और यह कि वे जिन अन्य वस्तुओं से कॉल करते हैं, वे अपेक्षित रूप से काम करने के लिए निर्देशित होते हैं। अधिकांश मामलों में आपकी निर्भरता की श्रृंखला एक लिंकिंग बिंदु पर होनी चाहिए, कॉल करने वाले के हिस्से पर विधि कॉल और वह स्थान जहां आर्ग्स आपके तरीकों में गिरा दिए जाते हैं। यहीं पर आप लॉग इन करते हैं और सत्यापन करते हैं और डिबग के लिए उपयोगी संदेश भेजते हैं जब चीजें बाहर आती हैं।
तथा:
"वर्ग विरासत पर अनुकूल वस्तु रचना"
डमी कौन है? वह व्यक्ति जिसने 30 वर्ग की तरह एक जटिल कैस्केडिंग वंशानुक्रम योजना में एक वर्ग के लिए कुछ किया, जिसके परिणामस्वरूप फ्रिंज केस टूट गया, या देव जो पहली बार उस वास्तुकला के साथ आए थे? टीडीडी आपको क्लास पीसा के उस झुके हुए टॉवर के अंदर के मुद्दों की तह तक जाने में मदद कर सकता है, जितनी जल्दी आप बिना कर सकते थे, लेकिन क्या इससे अगली बार उस कोड आपदा के समापन बिंदुओं में से एक को संशोधित करने का प्रयास करने में कोई कम दर्दनाक नहीं है?
और यही वह जगह है जहां मुझे वह चीज मिलती है जो मुझे परेशान करती है। क्या TDD वास्तव में डिजाइन में मदद करता है या यह खराब आर्किटेक्चर को सक्षम करता है? यह मुझे ऐसा लगता है जैसे इसमें एक आत्म-पूरा करने की रणनीति होने की क्षमता है। आपकी टीम को खराब आर्किटेक्चर के लिए जितनी अधिक ज़िम्मेदारी नहीं है, उतने अधिक उपयोगी वे दानेदार परीक्षण घटक बनते हैं, लेकिन अंततः आपका ऐप काम करने के लिए एक तेजी से बड़ा पीटीए बन जाता है (यह मानते हुए कि उन्होंने पहले आर्किटेक्चर में कभी बहुत सोचा नहीं था। स्थान)। और उस के परिणामों को स्वीकार करने में विफलता हाथ नीचे है, हमेशा सबसे महंगी गलती आप कर सकते हैं जब एक आवेदन पर काम कर रहा है जो समय के साथ उन्नत और संशोधित होने का मतलब है।