2017-02-06 6 views
6

मैं एफ # सीख रहा हूं, मैं अपने होम प्रोजेक्ट का अगला मॉड्यूल बनाना चाहता हूं। अब तक मेरा अधिकांश एफ # कोड कमांड लाइन के साथ लिखित टेस्ट कोड रहा है। मैंने Winforms पैनल में कुछ कस्टम ड्राइंग भी किया। अब तक, मुझे एक परिवर्तनीय चर का उपयोग नहीं करना पड़ा है। लेकिन अब मैं कुछ वास्तविक कोड लिखने की कोशिश कर रहा हूं और जैसे ही मैं व्यूमोडेल भाग में गया था, ऐसा लगता था कि यूआई म्यूटेबल के साथ बातचीत करने वाले चर बनाने के अलावा मेरे पास कोई विकल्प नहीं था। क्या यह सच है, या क्या मुझे कुछ याद आ रहा है?एफ # डब्ल्यूपीएफ एमवीवीएम क्या मैं दृश्य मॉडल चर को व्यवहार्य बनाने के बिना ऐसा कर सकता हूं?

+3

हां यह सच है - लेकिन आपको पहले से ही प्रयुक्त वस्तुओं को उत्परिवर्तनीय बनाने की आवश्यकता नहीं है। बस परिवर्तनीय गुणों के साथ "सजावट" रैपर वर्ग बनाओ। एक और दृष्टिकोण जो मैंने पाया, "नौकरी के लिए सही उपकरण" दृष्टिकोण का पालन करेगा, सी # परियोजनाओं को देखने और व्यू मॉडेल और एफ # आपके "व्यवसाय" तर्क के लिए उपयोग कर रहा है। अपरिवर्तनीय मूल्यों के लिए आप कनवर्टर्स बना सकते हैं जो प्रत्येक परिवर्तन – Fabio

+0

पर नया उदाहरण बनाएंगे, मैंने सी # में दृश्य मॉडल करने पर विचार किया था जब मैंने इसे महसूस करना शुरू किया था। मुझे लगता है कि यह जाने का रास्ता हो सकता है। मुझे लगता है कि परिवर्तनीय वस्तुओं के साथ आने वाला वाक्यविन्यास f # में प्राकृतिक नहीं है। धन्यवाद। – Jesse

+1

केवल (मौजूदा) वर्गों को बुनियादी ढांचे के लिए उत्परिवर्तनीय बनाने के लिए, 'CLIMutableAttribute' पर एक नज़र डालें। सुनिश्चित करें कि आपका डिज़ाइन प्रदूषित नहीं होता है और म्यूटेबिलिटी जितना संभव हो सके सीमित है। – CaringDev

उत्तर

5

एमवीवीएम के लिए, एफ # में एक बहुत ही महत्वपूर्ण लाभ होता है: यह परिपत्र निर्भरताओं की अनुमति नहीं देता है। इससे पैटर्न को तोड़ना बहुत मुश्किल हो जाता है: यानी मॉडल को व्यूमोडेल को सीधे प्रभावित करने के लिए, या दृश्य को देखने के लिए व्यूमोडेल को अनुमति देने के लिए। जैसा कि बेंट कहते हैं, एफ # बहु-प्रतिमान है: यह गेटर्स और सेटर्स के साथ गुणों का समर्थन करता है, और ये भाषा में चीजों को छोड़ने की ज़रूरत नहीं है।

यह दिलचस्प है कि मैं एफ # के फायदों में से एक के रूप में क्षमता की कमी का हवाला दे रहा हूं, लेकिन मुझे लगता है कि यह सटीक परिपत्र निर्भरताओं का यह पूर्ववर्ती है जो भाषा को उद्यम वास्तुकला के लिए एक अच्छा विकल्प बनाता है।

मेरे पास https://github.com/SpiegelSoft/Astrid पर खिलौना प्रोजेक्ट है। आप यह देखने के लिए देख सकते हैं कि मैंने ReactiveUI का उपयोग करके एमवीवीएम कैसे कार्यान्वित किया है।

2

हाँ, यह सच है। एमवीवीएम की अंतर्निहित प्रकृति अपरिवर्तनीयता को रोकती है।

यदि अपरिवर्तनीयता वास्तव में आपके लिए महत्वपूर्ण है, तो दिमित्री ए मोरोजोज द्वारा बनाई गई एमवीसी ढांचे पर एक नज़र डालें। यह GitHub पर परियोजना पृष्ठ है:

http://fsprojects.github.io/FSharp.Desktop.UI/

मुझे यकीन है कि मैं इसका इस्तेमाल होता है, के बाद से तो कुछ अन्य लोगों के काम नहीं कर रहा हूँ, लेकिन यह निश्चित रूप का अध्ययन कर के लायक है।

भाषा के लिए;

अगर मुझे सही याद है, तो शुरुआत में उन्होंने हास्केल के साथ प्रयोग किया, लेकिन फिर फैसला किया कि ओकम्ल अधिक व्यावहारिक था। तो यही है कि एफ # पर आधारित है। हास्केल उतना ही शुद्ध है जितना वे आते हैं, जो .NET दुनिया में एक समस्या बन गई है, जबकि एफ # एक बहु-प्रतिमानी भाषा है जो वास्तविक दुनिया की जरूरतों के लिए बेहतर है।

तो कुछ मामलों में एफ # में परिवर्तनीय उपयोग करने के बारे में बुरा मत समझें। मैं कहूंगा कि आप कहने के लिए कह रहे हैं। यह बिल्कुल बुरा नहीं है, और लंबे समय तक यह अभी भी सी # के मुकाबले ज्यादा कुशलतापूर्वक काम करता है।

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