2009-01-13 11 views
12

मैं अपने पर्ल परियोजनाओं में डीबीसी का उपयोग कर जांच कर रही हैं और मुझे स्रोत में ठेके सत्यापित करने के लिए सबसे अच्छा तरीका खोजने की कोशिश कर रहा हूँ (जैसे जाँच पूर्व/पोस्ट की स्थिति, अपरिवर्तनशीलताओं, आदि)पर्ल में अनुबंध द्वारा डिजाइन कैसे करते हैं?

Class::Contract द्वारा लिखा गया था डेमियन Conway और अब सी Garret Goebel द्वारा बनाए रखा है, लेकिन ऐसा लगता है कि यह 8 से अधिक वर्षों में छुआ नहीं गया है।

ऐसा लगता है कि मैं उपयोग करना चाहता हूं Moose है, ऐसा लगता है कि यह कार्यक्षमता प्रदान कर सकता है जो डीबीसी के लिए उपयोग किया जा सकता है, लेकिन मैं सोच रहा था कि किसी के पास कोई संसाधन (लेख इत्यादि) कैसे जाना है इसके बारे में, या यदि वहाँ कोई सहायक मॉड्यूल हैं जो मैं नहीं ढूंढ पा रहा हूं।

क्या कोई पर्ल के साथ डीबीसी कर रहा है? क्या मुझे सिर्फ मूस में "कूदना" चाहिए और देखें कि मैं इसे मेरे लिए क्या कर सकता हूं?

+0

@brian: मुझे लगता है कि यह सवाल राज्य का सबसे सीधा तरीका है। फिर भी कोई लेकर्स नहीं है। :) –

+1

@Adam - मैंने MooseX :: अनुबंध के लिए एक लिंक शामिल करने के लिए अपनी प्रतिक्रिया संपादित की। एक नज़र डालें और मुझे बताएं कि आप क्या सोचते हैं। –

+0

@ ब्रायन: काश मैं आपको फिर से उखाड़ फेंक सकता हूं! नीचे दिए गए अपने उत्तर पर मेरी टिप्पणी देखें। मुझे यकीन नहीं है कि मेरे पास इसका प्रयास करने का समय कब होगा। –

उत्तर

10

मूस आपको डीबीसी करने के लिए बहुत सारे उपकरण (यदि सभी चीनी नहीं) देता है। विशेष रूप से, आप तर्क हुक (here'ssome examples) के बाद और उसके बाद के पहले उपयोग कर सकते हैं ताकि आप तर्कों और वापसी मूल्यों पर जो भी दावा करना चाहते हैं, कर सकें।

"अपने स्वयं के डीबीसी को रोल करने" के विकल्प के रूप में आप MooseX::Method::Signatures या MooseX::Method जैसे मॉड्यूल का उपयोग एक सबराउटिन को पास किए गए मान्य पैरामीटर की देखभाल करने के लिए कर सकते हैं। ये मॉड्यूल "पोस्ट" या "इनवेरिएंट" सत्यापन को संभाल नहीं पाते हैं, हालांकि डीबीसी आमतौर पर प्रदान करता है।

संपादित करें: इस प्रश्न से प्रेरित, मैंने MooseX::Contract को एक साथ हैक किया है और इसे सीपीएएन पर अपलोड किया है। मैं एपीआई पर फीडबैक प्राप्त करने के लिए उत्सुक हूं क्योंकि मैंने कभी भी डीबीसी पहले हाथ का उपयोग नहीं किया है।

+0

यह बढ़िया है, ऐसा लगता है कि यह उन मामलों को संभालता है जिन्हें मैं पूछ रहा था। दुर्भाग्यवश, मैं भी डीबीसी प्रतिमान में नया हूं इसलिए मुझे नहीं पता कि मैं आपके एपीआई का न्याय करने वाला सबसे अच्छा व्यक्ति हूं। :) –

+1

हिंडसाइट के लाभ के साथ, क्या आप अभी भी इसके साथ जाएंगे? या आप कम से कम इनपुट और आउटपुट भाग के लिए 'फंक्शन :: पैरामीटर' और 'रिटर्न :: प्रकार' की सिफारिश करेंगे? –

2

मूस perl के लिए एक उत्कृष्ट ओओ सिस्टम है, और मैं दिल से किसी को कोडिंग में ऑब्जेक्ट कोडिंग के लिए अनुशंसा करता हूं। आप अपने वर्ग के सदस्यों के लिए "उपप्रकार" निर्दिष्ट कर सकते हैं जिन्हें एक्सेसर्स या कन्स्ट्रक्टर द्वारा सेट किए जाने पर लागू किया जाएगा (उसी प्रणाली को मूस :: फ़ंक्शन के लिए विधि पैकेज के साथ उपयोग किया जा सकता है)। यदि आप एक से अधिक लाइनर कोडिंग कर रहे हैं, तो मूस का उपयोग करें;

डीबीसी करने के लिए, अच्छी तरह से, perl5 के लिए सबसे अच्छा फिट नहीं हो सकता है। यह ऐसी भाषा में कठिन होगा जो आपको बहुत कम गारंटी देता है। व्यक्तिगत रूप से, बहुत गतिशील भाषाओं में, लेकिन विशेष रूप से perl, मैं अपने मार्गदर्शक दर्शन डीआरवाई, और परीक्षण संचालित विकास करने के लिए करते हैं।

+0

धन्यवाद, टोड। मुझे एक चुपके लग रहा था कि मौजूदा दृष्टिकोण हो सकता है, लेकिन चूंकि डैमियन ने एक बिंदु पर फैसला किया था कि यह एक मॉड्यूल लिखने लायक था, मैंने सोचा कि शायद यह काम कर सकता है। मुझे लगता है कि वे केवल जानते हैं कि क्या उन्होंने इसे छोड़ दिया क्योंकि यह सार्थक नहीं था। –

2

मैं मूस का उपयोग करने की भी सिफारिश करता हूं।

हालांकि "वैकल्पिक" के रूप में Sub::Contract पर एक नज़र डालें।

लेखक के शब्दों में ....

उप :: अनुबंध पर्ल में अनुबंध प्रतिमान द्वारा प्रोग्रामिंग के कुछ हिस्सों को लागू करने के एक व्यावहारिक तरीका प्रदान करता है।

सब :: अनुबंध डिज़ाइन-बाय-कॉन्ट्रैक्ट फ्रेमवर्क नहीं है।

उप :: अनुबंध का लक्ष्य सबटाउटिन इनपुट तर्कों को रोकना और रनटाइम पर मजबूत टाइपिंग अनुकरण करने के लिए मूल्यों को वापस करना बहुत आसान बनाना है।

1

यदि आपको क्लास इनवेरिएंट की आवश्यकता नहीं है, तो मुझे कुछ कार्यक्रमों के लिए एक अच्छा समाधान होने के लिए निम्नलिखित पर्ल हैक्स पुस्तक की सिफारिश मिली है। Smart::Comments देखें।

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