2008-09-15 15 views
8

आरओआर ट्यूटोरियल ओआरएम के लिए काम करने के लिए प्रति टेबल एक मॉडल प्रस्तुत करता है। मेरी डीबी स्कीमा में कार्यक्षमता के 5 समूहों में संकल्पनात्मक रूप से विभाजित कुछ 70 टेबल हैं (उदाहरण के लिए, कोई भी तालिका एक और केवल एक कार्यात्मक समूह में रहती है, और विभिन्न समूहों की तालिकाओं के बीच संबंध कम हो जाते हैं।) तो: क्या मुझे मॉडल तैयार करना चाहिए प्रति वैचारिक समूह, या क्या मुझे बस 70 रेल मॉडल मिलना चाहिए और समूह को 'वैचारिक' छोड़ देना चाहिए? धन्यवाद!रेल पर रूबी में मॉडल डिजाइन के लिए सर्वश्रेष्ठ अभ्यास

उत्तर

8

मैं यह सुनिश्चित करके केवल अपने बड़े ऐप्स में से एक में इसे कवर करता हूं कि टेबल/मॉडल अवधारणात्मक रूप से नाम से समूहित होते हैं (लगभग 1: 1 टेबल-मॉडल संबंध के साथ)। उदाहरण:

events 
event_types 
event_groups 
event_attendees 
etc... 

इस तरह जब मैं TextMate उपयोग कर रहा हूँ या जो कुछ भी, मॉडल फ़ाइलें अच्छी तरह से अल्फा तरह से एक साथ बांटा जाता है। मेरे पास इस ऐप में 80 मॉडल हैं, और यह चीजों को व्यवस्थित रखने के लिए पर्याप्त रूप से काम करता है।

+0

बेशक- यह समस्या को अच्छी तरह से हल करता है। धन्यवाद! – NickR

10

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

+0

धन्यवाद! अचानक मैं समझता हूं कि मैं मॉड्यूल का उपयोग क्यों कर सकता हूं। कुछ और पढ़ने के लिए बंद .. – NickR

6

सभी ActiveRecord जादू का लाभ उठाने के लिए आपको निश्चित रूप से प्रति तालिका एक मॉडल का उपयोग करना चाहिए।

लेकिन आप अपने मॉडल निर्देशिका में 70 फ़ाइलों को प्रबंधित करने से बचने के लिए मॉड्यूल और उप-निर्देशिकाओं का उपयोग करके अपने मॉडल को नामस्थानों में एक साथ समूहित कर सकते हैं।

उदाहरण के लिए, आप हो सकता है:

app/models/admin/user.rb 
app/models/admin/group.rb 
के लिए मॉडल व्यवस्थापक :: उपयोगकर्ता और व्यवस्थापक :: समूह

, और

app/models/publishing/article.rb 
app/models/publishing/comment.rb 
प्रकाशन के लिए

:: अनुच्छेद और प्रकाशन ::

टिप्पणी

और आगे ...

+0

धन्यवाद! उप-निर्देशिका/नामस्थान एक अच्छा समाधान है। निक – NickR

1

कुछ छोटे मामले हो सकते हैं जहां आप रेल स्टैंड का उपयोग कर सकते हैं तीसरा एकल-टेबल-विरासत मॉडल। शायद एक विशेष कार्यात्मक समूह में सभी वर्गों में एक ही फ़ील्ड (या लगभग सभी समान) होते हैं। उस स्थिति में, ड्रवाईनेस एसटीआई ऑफ़र का लाभ उठाएं। जब यह समझ में नहीं आता है, हालांकि, कक्षा-प्रति-तालिका का उपयोग करें।

कक्षा-प्रति-तालिका संस्करण में, आप आसानी से आधार वर्ग में सामान्य कार्यक्षमता को खींच नहीं सकते हैं। इसके बजाय, इसे एक मॉड्यूल में खींचें। निम्नलिखित की तरह एक पदानुक्रम उपयोगी साबित हो सकता है:

app/models/admin/base.rb - module Admin::Base, included by all other Admin::xxx 
app/models/admin/user.rb - class Admin::User, includes Admin::Base 
app/models/admin/group.rb - class Admin::Group, includes Admin::Base 
4

सत्तर टेबल और उनके वैचारिक संबंधों यह एक अच्छा जवाब देने के लिए संभव नहीं है वास्तव में की प्रकृति के बारे में अधिक जानकारी के बिना जाने। क्या ये विरासत सारणी हैं या आपने इसे स्क्रैच से डिज़ाइन किया है?

क्या किसी प्रकार के विरासत पैटर्न से संबंधित टेबल हैं या वे हो सकते हैं? रेल विरासत का एक सीमित रूप कर सकते हैं। सिंगल टेबल विरासत (एसटीआई) देखें।

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

1

यह पहले से ही उल्लेख किया गया है, अपने डेटाबेस स्कीमा आदि को जानने के बिना सभ्य सलाह देना मुश्किल है, हालांकि, मैं 70+ मॉडल बनाने की दिशा में दुबला हूं, (आपकी प्रत्येक तालिका के लिए एक।)

आप कुछ मॉडल को मिटाने में सक्षम हो सकते हैं, लेकिन लागत (नगण्य) के लिए आप उन्हें वहां भी ले सकते हैं।

आपको प्रत्येक मॉडल के लिए नियंत्रक + दृश्य बनाने की आवश्यकता नहीं है (जैसा कि srboisvert द्वारा उत्तर दिया गया है)। आपको केवल प्रत्येक संसाधन के लिए एक नियंत्रक की आवश्यकता है (जिसे मैं 70 से बहुत कम होने की उम्मीद करता हूं - शायद केवल 10 या 15 या तो आपके विवरण द्वारा निर्णय लेना)।

अपने टेबल से प्रत्येक एक "वस्तु" उदाहरण के लिए एक "कार" तालिका माना जाएगा या तालिकाओं के कुछ पकड़े हैं:

4

एक बनाने 70 मॉडल में कूद से पहले, आप तय करने में मदद करने के लिए इस सवाल का विचार करें उदाहरण के लिए सभी विदेशी कुंजी कॉलम, केवल रिश्ते की जानकारी?

रेल में केवल "ऑब्जेक्ट" टेबल मॉडल बन जाते हैं! (विशिष्ट प्रकार के संगठनों के लिए कुछ अपवाद के साथ) तो यह बहुत संभावना है कि यदि आपके पास कार्यक्षमता के केवल 5 समूह हैं, तो आपके पास 70 मॉडल नहीं हो सकते हैं। साथ ही, यदि आपके द्वारा उल्लिखित कार्यक्षमता के समूह काफी अलग हैं, तो वे अपने स्वयं के ऐप में भी उपयुक्त हो सकते हैं।

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