2014-09-22 5 views
13

अभ्यास में अंतर क्या है? आप दूसरे पर एक का उपयोग क्यों करेंगे? ऐसा लगता है कि दोनों प्रकारों का उपयोग समान समस्याओं को हल करने के लिए किया जाएगा।इंटरफ़ेस बनाम कार्यों का रिकॉर्ड

मेरा प्रश्न केवल कार्यात्मक एफ # कोड के संबंध में है। बाहरी पक्षों के संपर्क में आने वाले एफ # घटकों के लिए मैंने पाया कि Component Design Guidelines कार्यों के रिकॉर्ड पर इंटरफेस दृष्टिकोण को प्राथमिकता देने का सुझाव देता है।

उत्तर

17

संकल्पनात्मक रूप से, कार्यों के रिकॉर्ड इंटरफ़ेस के समान होते हैं और अधिकांश समय, आप दोनों को किसी दिए गए समस्या को हल करने के लिए उपयोग कर सकते हैं (इसलिए यह एक अच्छा मान्य प्रश्न है)।

यदि आप तकनीकी पहलुओं पर देखते हैं, तो सबसे बड़ा अंतर यह है कि इंटरफेस में सामान्य तरीके हो सकते हैं।

type IFoo<'T> = 
    abstract Bar<'R> : 'R -> 'T 

हालाँकि, व्यवहार में, मुझे लगता है कि और अधिक महत्वपूर्ण अंतर हैं: उदाहरण के लिए, वहाँ जो निम्न के समान होगी कार्यों का एक सरल रिकॉर्ड को परिभाषित करने के लिए कोई तरीका है - यह कुछ ऐसा है रिकॉर्ड का उपयोग नहीं किया जा सकता है अंतर और डिजाइन से संबंधित:

  • इंटरफेस के साथ सी # और अन्य .NET घटक
    (सी # से कार्यों का एक एफ # रिकॉर्ड का निर्माण बहुत मुश्किल होगा और बदसूरत) अच्छी तरह से interoperate
  • इंटरफेस एक अलग इरादा व्यक्त - वे इंटरफ़ेस हैं जिन्हें संतुष्ट और कार्यान्वित किया जा सकता है।
    दूसरी ओर, रिकॉर्ड बनाए गए कार्यों के संग्रह हैं।
  • रिकॉर्ड्स अच्छे हैं यदि आपको एक फ़ंक्शन को प्रतिस्थापित करने के लिए { oldValue with NewFunction = newFunction } निर्माण का उपयोग करने की आवश्यकता है।

आम तौर पर, जब मैं कुछ राज्यों को उदाहरण के दौरान रखना चाहता हूं तो मैं ज्यादातर रिकॉर्ड का उपयोग करता हूं। कुछ डेटा संरचना की पुनरावर्ती प्रसंस्करण और मुझे with निर्माण की आवश्यकता है। सार्वजनिक एपीआई के लिए, मेरा मानना ​​है कि इंटरफेस और सरल कक्षाओं का उपयोग रिकॉर्ड का उपयोग करने से बेहतर अमूर्त है।

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