2012-03-28 17 views
7

Son zamanlarda bir RoR geliştiricisi olan bir arkadaşımla bir tartışma yaptım. Rails modellerinin nasıl yönetilmesi gerektiğini tartıştık. Şahsen ben varsayılan isim alanında sadece kök modelleri (örneğin Kullanıcı, Makale, Fatura vb.) Bırakmak istiyorum ve bağımlı modeller bir modül (ör: Kullanıcı :: Profil, Kullanıcı :: Etkinlik) kök adıyla gider. model ile ilişkilidir. Öte yandan Rails uygulamasında ad-adlandırma modelleri

, ben böyle devam user_profile, user_activity ve benzeri adlı varsayılan ad alanında 100 modelleri gibi vardı birçok projeyi gördük. Java (Spring) gelişimine bakarak, java topluluğu, sınıfları paketler halinde düzenlemeye ve onları mantıklı bir şekilde gruplandırmaya yöneliyor. herhangi modüllerde gruplama modellerinde dezavantajı var gibidir:

Yani soru (ekstra hariç: ilişki tanımında class_name) ve insanlar genellikle bunu yapmayın neden herhangi bir spesifik nedenler vardır?

cevap

4

Ad boşluğunun avantajları olsa da, modelleriniz boyunca istisnalar eklemenizi gerektirir. Foo :: Bar, bars numaralı tablo adını ve benzer şekilde bar_id derneklerini, bunun yerine foo_bars ve foo_bar_id kullanmayı tercih edebilir. Gerçekten bu ısrar ediyorsanız

, bir eklenti sizin için düzeltmeler bu ya yapar kendi uzantısı uygulamak olduğunu olup olmadığını görmek isteyebilirsiniz.

Ad alanlarını kullanmamdaki tek örnek, kök düzeydeki model adlarını haklı göstermek istemediğim üçüncü taraf uygulamalarda kullanılacak eklentiler içindir. Bu durumda fazladan çaba harcanır.

Herhangi bir gruplama olmaksızın 100'den fazla model dosyasını görerek rahatsızlık duyuyorsanız, gruplandırmadan 100+ tablo görerek muhtemelen aynı şekilde rahatsız olacaksınız ve bu genellikle düzeltemeyeceğiniz bir şeydir.

Kontrolörler oldukça doğal gruplama kendilerini ödünç ama mankenler gibi kolayca en azından stok ActiveRecord ile ağırladı değildir.

+2

En son veritabanı gezgini açtığımı hatırlayamıyorum. Ruby ile doğal olarak böyle şeyleri soyutlamak için geliyor. Hatırladığım kadarıyla, Foo :: Bar bir "foo_bar" tablosu oluşturacaktır. Tek dezavantajı, bir: class_name => Foo :: dernekler derneklerini belirtmenizdir. Tüm modelleri tek bir dizinde tutmayı teşvik ederse, raylı uygulamaların karmaşık bir uygulama ile nasıl başa çıkacağını merak ediyorum. Yani, eğer uygulama çok fazla büyüyorsa, gerekli refaktörün bir parçasını mı yoksa sadece Java'ya mı geçiyor?) – FreeCandies

+6

Genellikle önekini bir ad alanı olarak kullanma yaklaşımını kullanırım, bu yüzden UserProfile ve UserActivity gibi şeyler yaratırsınız Profil veya Etkinlik yerine. Bu, listede doğal bir gruplandırmaya yol açar. Ad alanından önemli ölçüde yararlanacak 500 + modelli bir uygulama görmek nadirdir. Karmaşık karmaşıktır. Bazen, uygulamanızın ne kadar karmaşık olduğunu denemek ve karmaşıklığı gömmek ve sadece bir şeyleri bulmayı zorlaştırarak gerçekten basit gibi davranmaktan daha dürüst olmak iyidir. – tadman