तो, मैं क्लोजर एसपीसी में गहरा और गहराई से डाइविंग कर रहा हूं।Clojure.Spec के लिए चश्मा कहां रखा जाए?
एक चीज जिस पर मैंने ठोकर खाई, जहां मेरी चश्मा डाली गई है। मैं तीन विकल्प देखें:
वैश्विक युक्ति फ़ाइल
सबसे उदाहरण में, मैं ऑनलाइन पाया, एक बड़ा spec.clj
फ़ाइल, मुख्य नाम स्थान में आवश्यक हो जाता है कि वहाँ है। इसमें सभी "डेटा प्रकार" और कार्यों के लिए सभी (s/def)
और (s/fdef)
हैं।
प्रो:
- एक फ़ाइल उन्हें शासन करने के लिए सभी
कॉन्ट्रा:
- इस फ़ाइल में बड़ा हो सकता है
- एकल Responsibliy सिद्धांत का उल्लंघन किया?
उत्पादन नामस्थान
में चश्मा आप डाल सकता है आपके (s/def)
और (s/fdef)
सही अपने उत्पादन कोड के बगल में। इसलिए, कार्यान्वयन और spec एक ही नामस्थान में सह-अस्तित्व में है।
प्रो:
- कार्यान्वयन और कल्पना के सह स्थान
- एक नाम स्थान - एक चिंता का विषय है?
कॉन्ट्रा:
- उत्पादन कोड गन्दा
- एक नाम स्थान मिल सकता है - दो चिंताएं हैं?
समर्पित कल्पना नाम स्थान संरचना
फिर मैंने सोचा, शायद चश्मा कोड (अगले उत्पादन और परीक्षण करने के लिए) का एक तिहाई तरह कर रहे हैं।तो शायद वे नामस्थान का अपना संरचना के लायक है, इस तरह:
├─ src
│ └─ package
│ ├─ a.clj
│ └─ b.clj
├─ test
│ └─ package
│ ├─ a_test.clj
│ └─ b_test.clj
└─ spec
└─ package
├─ a_spec.clj
└─ b_spec.clj
प्रो:
- समर्पित (लेकिन संबंधित) चश्मा के लिए नामस्थान
कॉन्ट्रा:
- आपको स्रोत नाम देना होगा और सही नामस्थानों की आवश्यकता होगी
किसके दृष्टिकोण में से एक का अनुभव है?
क्या कोई और विकल्प है?
आप विभिन्न विकल्पों के बारे में क्या सोचते हैं?
[अलग नामस्थान में होने पर विनाश के लिए चश्मा का उपयोग करके] [http://stackoverflow.com/q/38024650/5044950) के लिए आपकी सलाह क्या होगी? –
@levand सैम एस्टेप ने अपने प्रश्न में एक अच्छा मुद्दा बनाया है कि आप इसे पार्सिंग के लिए इस्तेमाल करने के लिए लोड किए जा रहे एक स्पेक पर भरोसा नहीं कर सकते हैं क्योंकि यदि आपको पहले से ही अपने एनएस की आवश्यकता है तो आपको spec ns की आवश्यकता नहीं हो सकती है। तो शायद एक '(लोड "मेरा/ऐप/foo_specs")/(in-ns' my.app.foo) ('[clojure.spec: as s] की आवश्यकता है)' कोई अलग एनएस के साथ एक बेहतर पैटर्न होगा यदि आप पठनीयता –
के लिए एक अलग फ़ाइल में चश्मा चाहते हैं यह एक अच्छा बिंदु है ... ऐसी स्थितियां हैं जहां आप अपने कार्यान्वयन नेमस्पेस को अपने स्पेस नेमस्पेस पर निर्भर करते हैं, जिसका तात्पर्य है कि आपका spec ns * impl * n पर निर्भर नहीं हो सकता है। वर्तमान में, इसे हल करने का कोई अच्छा तरीका नहीं है - सबसे अच्छा सिर्फ spec में पूरी तरह से योग्य नामस्थान नाम टाइप करना होगा। सौभाग्य से, कार्यों में कुछ बदलाव हैं जो आपको उन नामस्थानों को उपनाम करने की अनुमति देंगे जिन्हें अभी तक लोड/आवश्यक नहीं किया गया है, जो इस समस्या को अच्छी तरह से हल करना चाहिए। – levand