मैं एक बहुत बड़े रेल आवेदन पर काम कर रहा हूं। हमने शुरुआत में अधिक विरासत का उपयोग नहीं किया था, लेकिन हमारे पास परामर्शदाता से कुछ आंख खोलने के अनुभव हुए हैं और हमारे कुछ मॉडलों को दोबारा प्रतिक्रिया देने की तलाश में हैं।कितने वर्ग बहुत अधिक हैं? रेल एसटीआई
हम निम्नलिखित पैटर्न हमारे आवेदन में एक बहुत कुछ है:
class Project < ActiveRecord::Base
has_many :graph_settings
end
class GraphType < ActiveRecord::Base
has_many :graph_settings
#graph type specific settings (units, labels, etc) stored in DB and very infrequently updated.
end
class GraphSetting < ActiveRecord::Base
belongs_to :graph_type
belongs_to :project
# Project implementation of graph type specific settings (y_min, y_max) also stored in db.
end
यह भी देखा गया, सहायकों में और GraphSetting मॉडल अपने आप में सशर्त, की एक टन का परिणाम है। इनमें से कोई भी अच्छा नहीं है।
एक साधारण refactor जहां हम और अधिक इस तरह की एक संरचना का उपयोग के पक्ष में GraphType से छुटकारा पाने:
class Graph < ActiveRecord::Base
belongs_to :project
# Generic methods and settings
end
class SpecificGraph < Graph
# Default methods and settings hard coded
# Project implementation specific details stored in db.
end
अब यह मेरे लिए एकदम सही समझ में आता है, परीक्षण को आसान बनाता है, सशर्त, निकाल देता है, और बाद में अंतर्राष्ट्रीयकरण आसान बना देता है। हालांकि हमारे पास केवल 15 से 30 ग्राफ हैं।
हमारे पास 100 अलग-अलग प्रकार के करीब के साथ एक बहुत ही समान मॉडल (उदाहरण के रूप में उपयोग करने के लिए जटिल) है, और संभावित रूप से इसे दोगुना कर सकता है। उनके पास सभी रिश्तों और विधियों का उत्तराधिकारी होगा, कुछ को अन्य तरीकों को ओवरराइड करने की आवश्यकता होगी। यह सही उपयोग की तरह लगता है, लेकिन बहुत से लोग बहुत पसंद करते हैं।
क्या 200 एसटीआई कक्षाएं कई हैं? क्या कोई और पैटर्न है जिसे हमें देखना चाहिए?
किसी भी ज्ञान के लिए धन्यवाद और मैं किसी भी प्रश्न का उत्तर दूंगा।
उत्तर के लिए धन्यवाद। इस बिंदु पर मुझे नहीं लगता कि हमारे पास डेटाबेस में कई (यदि कोई हैं) शून्य मान होंगे, क्योंकि गुण समान हैं, केवल मान और विधियां बदलेगी। (उदाहरण के लिए ग्राफ़ को साजिश के लिए डेटा कैसे देता है)। यदि हम शून्य क्षेत्रों के साथ समाप्त होते हैं (शायद यह विशेष उदाहरण नहीं है, लेकिन अन्य समान हैं) मैं निश्चित रूप से इसे ध्यान में रखूंगा। –
http://stackoverflow.com/questions/1634668/multiple-table-inheritance-vs-single-table-inheritance-in-ruby-on-rails/1634734#1634734 में एक और समान दृष्टिकोण है –