एक उदाहरण से शुरू करते हैं।
मान लीजिए, मेरे पास एक विधि है जिसे export
डीबी स्कीमा पर बहुत अधिक निर्भर करता है। और "बहुत हद तक निर्भर करता है" से मेरा मतलब है कि मुझे पता है कि एक निश्चित तालिका में एक नया कॉलम अक्सर (बहुत बार) export
जोड़ने से संबंधित विधि परिवर्तन होता है (आमतौर पर आपको नए क्षेत्र को निर्यात डेटा में भी जोड़ना चाहिए)।
प्रोग्रामर अक्सर export
विधि बदलना भूल जाते हैं क्योंकि यह वास्तव में स्पष्ट नहीं है कि आपको इस पर भी ध्यान देना चाहिए। मेरा लक्ष्य प्रोग्रामर को स्पष्ट रूप से यह निर्धारित करने के लिए बाध्य करना है कि वह export
विधि को देखना भूल गया या केवल निर्यात डेटा में फ़ील्ड जोड़ना नहीं चाहता। और मैं इस समस्या के लिए डिज़ाइन समाधान की तलाश कर रहा हूं।
मेरे पास दो विचार हैं, लेकिन दोनों में दोष हैं।
स्मार्ट "सभी पढ़ें" आवरण
मैं स्मार्ट रैपर बना सकता हूं जो सुनिश्चित करता है कि सभी डेटा स्पष्ट रूप से पढ़ा जाए।
कुछ इस तरह:
def export():
checker = AllReadChecker.new(table_row)
name = checker.get('name')
surname = checker.get('surname')
checker.ignore('age') # explicitly ignore the "age" field
result = [name, surname] # or whatever
checker.check_now() # check all is read
return result
इसलिए, checker
यदि table_row
कोई अन्य फ़ील्ड शामिल है जो पढ़ा नहीं गया है तो मुखर करता है । लेकिन यह सब कुछ एक तरह से भारी लगता है और (शायद) परफ्यूम को प्रभावित करता है।
" उस विधि की जाँच करें " unittest
मैं केवल अंतिम तालिका स्कीमा को याद रखने वाला सबसे उपयुक्त बना सकता हूं और हर बार तालिका बदलने पर विफल हो जाता है। उस स्थिति में प्रोग्रामर को कुछ इस तरह दिखाई देगा " export
विधि की जाँच करना मत भूलना "। चेतावनी को छिपाने के लिए प्रोग्रामर (या - यह एक समस्या नहीं है) की जांच करेगा export
और मैन्युअल रूप से (यह एक और समस्या है) इसमें नए फ़ील्ड जोड़कर परीक्षण को ठीक करें।
मेरे पास कुछ अन्य विचार हैं, लेकिन वे लागू करने के लिए बहुत परेशान हैं या समझना बहुत मुश्किल है (और मैं नहीं चाहता कि परियोजना एक पहेली बन जाए)।
उपरोक्त समस्या समय-समय पर मेरे द्वारा सामना की जाने वाली समस्याओं के अधिक विस्तृत वर्ग का एक उदाहरण है। मैं कोड और / या बुनियादी ढांचे के कुछ टुकड़ों को बांधना चाहता हूं ताकि उनमें से एक को तुरंत बदलकर प्रोग्रामर को दूसरे की जांच करने के लिए अलर्ट किया जा सके। आम तौर पर आपके पास कुछ सरल उपकरण होते हैं जैसे कि आम तर्क निकालना या विश्वसनीय unittest लिखना, लेकिन मैं अधिक जटिल मामलों के लिए टूल की तलाश कर रहा हूं: शायद कुछ डिज़ाइन पैटर्न जिनसे मैं अब अवगत हूं।
export
आपके पास वास्तविक रूप से सब कुछ है?
export
स्कीमा के आधार पर जनरेट कर सकते हैं ?