SORU
1 Temmuz 2009, ÇARŞAMBA


Eşyaları Nereye koyacağını Raylar Tasarım OO:

Gerçekten Raylar genellikle Huzursuz olsam da () tadını çıkarıyorum, ve Ruby çok OO olmanın tadını çıkarın. Yine de, büyük ActiveRecord sınıfları ve büyük denetleyicileri yapmak eğilimi oldukça doğal kaynak başına bir denetleyici kullanıyorsanız bile). Eğer daha derin nesne dünyalar yaratmak olsaydın, nereye sınıfları (ve modülleri sanırım) koyar mısınız? Görünümler (Yardımcılar kendilerini?) soruyorum kontrolörler ve modelleri.

Lib Tamam, some solutions to get it to reload in a dev environment ama eğer yapacak daha iyi bir yolu varsa bilmek istiyorum bunları buldum. Gerçekten sadece sınıflar çok büyük büyüyen endişe ediyorum. Ayrıca, Motorlar ve nasıl konuşabiliriz?

CEVAP
1 Temmuz 2009, ÇARŞAMBA


Rails MVC açısından yapı sağlar, çünkü doğal kullanarak sonuna kadarsadecemodel, görünüm ve denetleyici kaplar sizin için sağlanan. Yeni başlayanlar (ve hatta bazı orta seviye programcılar) için tipik deyim modeli (veritabanı sınıfı), kontrolör veya Görünüm içine uygulama tüm mantık tıkmak.

Bir noktada, birisi işaret etmektedir "şişman model, sıska-kontrol" paradigma, ve ara geliştiriciler aceleyle tüketim her şey onların denetleyicileri ve içine atalım modeli, hangi başlar olmak için yeni bir çöp kutusu uygulama mantığı.

Sıska denetleyicileri, aslında, iyi bir fikir, ama sonuç--modeli her şeyi koyarak, çok iyi bir plan değil.

Ruby, işler daha modüler yapmak için iyi bir kaç seçenek var. Oldukça popüler bir cevap sadece yöntemlerin gruplar üzerinde tutun ve ardından uygun sınıflara modülleri içeren modülleri (genellikle lib stashed) kullanmaktır. Bu birden çok sınıf içinde yeniden kullanmak istediğiniz, ama işlevleri notionally sınıflarının bağlı bulunduğu işlevsellik kategori olduğu durumlarda yardımcı olur.

Bir sınıf içine bir modül eklediğinizde, unutmayın, bu yöntemler hala bir sınıf içeren bu örnek sınıfın yöntemleri, olurtonyöntemleri, nazikçe birden fazla dosya halinde organize ediyorlar.

Bu çözüm de bazı durumlarda diğer durumlarda, bu kod sınıfları kullanarak düşünmek isteyeceksin çalışabilirdeğilmodelleri, görünümleri veya denetleyicileri.

Bunu düşünmek için iyi bir yol "tek sorumluluk prensibi," bir sınıf, bir tek (veya az sayıda) şeylerden sorumlu olması gerektiğini söylüyor. Modelleri veritabanı uygulama kalıcı veri sorumludur. Denetleyicisi için sorumluluk alma talebinizi ve uygun bir yanıt dönüyor.

Eğer düzgün bir şekilde bu kutulara (sebat, istek/tepki yönetimi) sığmayan kavramlar varsa, muhtemelen ne hakkında düşünmek isteyebilirsinizsöz konusu fikir model. App/sınıflar-model olmayan sınıflar, ya da başka bir yerde, Depo ve yaparak: yük yolu bu dizin ekleyebilirsiniz

config.load_paths << File.join(Rails.root, "app", "classes")

Eğer yolcu veya JRuby kullanıyorsanız, muhtemelen de istekli yük yolları için yol eklemek istiyorum:

config.eager_load_paths << File.join(Rails.root, "app", "classes")

Alt satırı bir kez olsun bir noktada Raylar nereden buldunuz kendinize soruyor bu soruyu, o zaman eti senin Ruby pirzola ve başlangıç modelleme sınıfları değil sadece MVC dersleri Raylar verir varsayılan olarak.

Güncelleme:Bu cevap Raylar için 2 geçerlidir.x ve daha yüksek.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Doug Bernards

    Doug Bernard

    7 Kasım 2007
  • RiceBunny

    RiceBunny

    16 ŞUBAT 2006
  • WHZGUD2

    WHZGUD2

    21 EYLÜL 2011