2010-06-21 17 views
41

क्या स्कैला जैसी भाषाओं के लिए पहले से ही सर्वोत्तम प्रथाओं का संग्रह है?कार्यात्मक-ओओ हाइब्रिड भाषाओं के लिए डिजाइन पैटर्न?

मुझे कार्यात्मक भाषाओं के लिए डिजाइन पैटर्न पर एक काम मिला है, Design patterns for functional strategic programming। OO भाषाओं के लिए GoF डिज़ाइन पैटर्न हैं। लेकिन क्या कार्यात्मक-ओओ संकर के लिए कोई पैटर्न हैं? मैंने देखा है this सूची है। क्या जाना जाता है?

+0

पिछले लिंक (के पास "सभी मैंने देखा है") टूट गया है। –

+1

आप को देखते हुए http://pavelfatin.com/design-patterns-in-scala/ –

उत्तर

19

बिल वेनेर्स से दो पैटर्न; मुझे लगता है कि स्कैलाटेस्ट में दोनों का भारी उपयोग किया जाता है:

Stackable Trait (सजावट पैटर्न में संरचना के समान, सिवाय इसके कि ऑब्जेक्ट संरचना के बजाए कक्षा संरचना के उद्देश्य के लिए सजावट शामिल है)।

Selfless Trait (पुस्तकालय डिजाइनरों को सेवाएं प्रदान करने की अनुमति देता है जो उनके ग्राहक मिश्रण या आयात के माध्यम से या तो पहुंच सकते हैं)।

Type safe builder

Independently Extensible Solutions to the Expression Problem - बस "स्केलेबल घटक अमूर्त" की तरह, यह एक पैटर्न सूची में नहीं है, लेकिन यह भी इसी तरह की समस्याओं से संबंधित है (जैसे आगंतुक पैटर्न)

Deprecating the Observer Pattern - पर्यवेक्षक के लिए एक विकल्प ।

हम Haskell प्रकार स्केल अनुकरण को डिज़ाइन पैटर्न पर भी स्केल इम्यूलेशन पर विचार कर सकते हैं। पहला विवरण (जो मुझे कम से कम मिल सकता है) Poor Man's Type Classes में है। इस विषय के साथ काफी कुछ ब्लॉग प्रविष्टियां भी उपलब्ध हैं।

और मुझे लगता है कि अगर मैं विभिन्न मोनैड का भी उल्लेख करता हूं तो मैं पूरी तरह से गलत नहीं हूं। आप उनके साथ काम कर रहे बहुत सारे संसाधन पा सकते हैं।

12

जबकि नहीं सीधे एक डिजाइन पैटर्न सूची ही है, कागज "Scalable Component Abstractions" (मार्टिन ओडर्स्की; मथायस Zenger) पुन: प्रयोज्य घटकों के लिए तीन बिल्डिंग ब्लॉक्स की जांच करता है:

  • सार प्रकार के सदस्यों,
  • स्पष्ट selftypes, और
  • मॉड्यूलर मिश्रित संरचना।

और यह कई डिजाइन पैटर्न (प्रकाशित करें/सदस्यता ले, विषय/पर्यवेक्षक, प्रसंग/घटक) उदाहरण देकर स्पष्ट करना और समझने की क्या भाषा निर्माणों स्केलेबल और गतिशील घटकों के सिस्टम को प्राप्त करने के लिए आवश्यक हैं करने के लिए फिर से देखता है।

5

एक बार देखा गया पैटर्न, जिसे बुरी तरह से नाम की आवश्यकता होती है, करीबी पैरामीटर सूचियों और उप-पैरामीटर पैरामीटर के साथ नियंत्रण abstractions बना रहा है।

def command(expr: T)(block: => Unit) {...} 

command (expr) { 
    block 
} 
+0

पर एक नज़र लग सकता है अन्य "ख़ास" नाम के कुछ, कैसे "मुझे क्या" पैटर्न के बारे में? –

+2

वैसे, मुझे लगता है कि हमें शब्दावली के बारे में सावधान रहना चाहिए और इस मामले में, यह एक करीबी * फ़ंक्शन * नहीं है, बल्कि एक * विधि * एकाधिक तर्क सूचियों के साथ है। –

+0

यह स्कैला wiik पर "ऋण" पैटर्न को कॉल करने के समान दिखता है: http://scala.sygneca.com/patterns/loan –

4

के रूप में ज्यादा में उपज किसी भी वस्तु कार्यात्मक भाषा जल्दी से एक अभिनेता के पुस्तकालय प्राप्त करने के लिए जा रहा है के रूप में, अभिनेता आधारित पैटर्न की एक बड़ी संख्या शायद इस प्रश्न के लिए योग्य हैं। लगभग किसी भी बॉब मार्टिन Enterprise Integration Patterns में पैटर्न के अभिनेताओं के मामले में recastable है, सिस्टम चारों ओर मोटे सुक्ष्म अभिनेताओं architected में विशेष रूप से आम किया जा रहा है लोड बैलेंसर, संदेश फ़िल्टर, सामग्री आधारित रूटर, और सामग्री Enricher की तरह पैटर्न के साथ।

3

निकट से संबंधित है, तो आप के रूप में purely functional (या संकर कार्यात्मक) भाषाओं में परिभाषित डेटा संरचनाओं का पता लगाने कर सकते हैं। एक के लिए, कार्यों का इलाज करने की क्षमता के रूप में प्रथम श्रेणी के मान कुछ पैटर्न (जैसे visitor, template method या decorator) कुछ में अनावश्यक (सभी नहीं) संदर्भों बनाते हैं। दूसरे, डाटा संरचनाओं (और एल्गोरिदम कि उन पर काम करते हैं) या तो डिजाइन पैटर्न, या वर्तमान कुछ समस्याओं कि डिजाइन पैटर्न का समाधान करने के प्रयास के लिए पाइपलाइन हैं, विकिपीडिया लेख Purely functional देखते हैं।

अभी तक बेहतर, मैं तुम्हें Okasaki's thesis on purely functional data structures का उल्लेख होगा।

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