2010-11-02 13 views
7

जब मैं रूबी मेटाप्रोग्रामिंग के बारे में और अधिक पढ़ता हूं, तो अधिकांश समय हमें किसी समस्या को हल करने के लिए कम से कम दो समाधान मिलते हैं।क्लास बनाम मॉड्यूल?

class Base 
    def self.has_many(*args) 
    # ... 
    end 
end 

class Student < Base 
    has_many :books 
end 

एक और शैली:: कृपया नीचे दो उदाहरण देखते

module Base 
    def self.included(klass) 
    klass.extend ClassMethods 
    end 

    module ClassMethods 
    def has_many(*args) 
     # ... 
    end 
    end 
end 

class Student 
    include Base 

    has_many :books 
end 

लेकिन जब हम एपीआई डिजाइन, हम जो एक का उपयोग करने का फैसला किया है, लेकिन मैं अपने विचारों और से कुछ पूछना चाहते हैं सर्वोत्तम प्रथाओं कि ज्यादातर लोगों ने पहले से ही अपने पुस्तकालयों में लागू किया है।

उत्तर

5

अपने एपीआई जो ग्राहक द्वारा बढ़ाया जाएगा आधार कार्यक्षमता प्रदान कर रहा है, तो लग रहा है, तो आप विरासत को प्राथमिकता देनी चाहिए।

यदि आपका एपीआई विभिन्न ग्राहकों को अपनी मूल कार्यक्षमता के साथ विस्तारित करने जा रहा है, तो आपको संरचना के लिए जाना चाहिए।

2

आपके पास उस प्रश्न के आसपास बहुत सारे सिद्धांत हैं।

मुझे रचना पसंद है क्योंकि यह व्यवहार को इस तरह से अधिक पुन: प्रयोज्य बनाता है लेकिन यदि आप रेल को देखते हैं, तो आपको हर बार जब आप अपने डेटाबेस में ऑब्जेक्ट करना चाहते हैं तो आपको ActiveRecord :: बेस क्लास को उपclass करना होगा। यदि आप डेटामैपर को देखते हैं, तो यह विपरीत है क्योंकि उन्हें केवल डेटामैपर :: संसाधन शामिल करने की आवश्यकता है।

विरासत बनाम संरचना (मॉड्यूल के माध्यम से) एक बड़ा विषय है और सवाल जो आपको खुद से पूछना होगा, नीचे आ जाएगा: मैं जो घटक प्रदान करता हूं और अन्य उपयोगकर्ता कोड कोड के बीच अधिक decoupling कैसे प्राप्त कर सकता हूं?

1

रूबी केवल एकल विरासत का समर्थन करता है। इसलिए यदि एपीआई क्लाइंट को आपकी बेस क्लास का उत्तराधिकारी होना चाहिए, तो वे अन्य वर्गों के उत्तराधिकारी की क्षमता खो देते हैं। मॉड्यूल समावेशन का उपयोग करके आप एक कोड संभव बनाते हैं:

class Student < Person 
    include Base 
    has_many :books 
end 

और इस प्रकार आप व्यक्ति और आधार दोनों "उत्तराधिकारी" कर सकते हैं।

हालांकि, शास्त्रीय विरासत वाक्य रचना अधिक प्राकृतिक और कम "जादू"

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