activerecord model olarak, bu iyi bir fikir mi?

3 Cevap php

Son zamanlarda sayesinde raylar 'popülaritesi nedeniyle, birçok kişi model olarak ActiveRecord kullanmaya başlayabilirsiniz. ancak ben rayların duydum önce, (benim akran grubu açık kaynak şeyler bir hayranıyım değildi, biz ... bir. NET okulda öğretilen) ve benim son yıl proje yapıyor iken, ben bir model için bu tanım bulundu

Modeli kurumsal veri ve erişim ve bu verilerin güncellemeleri yöneten iş kurallarını temsil eder. Genellikle modeli modelini tanımlayan zaman çok basit, gerçek dünya modelleme teknikleri uygulamak, gerçek bir dünya süreci bir yazılım yaklaşım olarak hizmet vermektedir.

Bu modeli activerecord ne gibi bir tablo temsil etmeli demiyor. Ve normal bir işlem içinde, bir ... bir kaç ilgisiz tabloları sorgulamak ve daha sonra farklı tablolardan veri işlemek zorunda kalabilirsiniz activerecord model olarak kullanılır, daha sonra biri olduğu (denetleyici içine tüm mantık kod tıkmak zorunda kalacak ya o kadar iyi eşleyen masaya değil, yalnızca veritabanı işlemini gerçekleştirir, ama aynı zamanda diğer ilgili tablolar, böylece zor activerecord modeli test veya kesmek için yapar) bazı php çerçeveler tür popüler ...

yani, ne bir MVC mimari desen model olarak (IMHO) ActiveRecord kötüye bu kadar büyük?

3 Cevap

Martin Fowler diğer iki desenleri ya da mimarileri ile birlikte Kurumsal Uygulama Mimarisi Patterns bu desen nitelendirdi. Bu modeller farklı durumlarda ve farklı karmaşıklık tutarlar için iyidir.

Bunu sadece basit şeyler sen İşlem Script kullanabilirsiniz isterseniz. Bu çok şey tek bir komut iş mantığı, veri erişim mantığı ve sunum mantığı bulunan eski ASP ve PHP sayfaları gördüğüm bir mimaridir. Işler daha karışık olsun bu hızlı yıkılır.

Yapabileceğiniz bir sonraki şey, sunum ve model arasında bazı mesafeyi ekleyin. Bu activerecord olduğunu. Modeli hala veritabanına bağlı ama Gösterim / sayfalar / ne olursa olsun arasındaki model / dataccess yeniden olabilir çünkü biraz daha esneklik var edilir. Bu olabilir ama veri erişim çözümü olarak yeterince esnek olması gibi esnek değil. . Net CSLA gibi çerçeveler (Ben Varlık Framework de böyle biraz fazla görünüyor düşünüyorum) bu patterm gelen yönlerini bir şey var. Hala unmaintainable olmadan karmaşık bir sürü işleyebilir.

Bir sonraki adım, veri erişim katmanı ve model ayıran. Bu genellikle iyi veya eşleştiricisini veya iş bir sürü gerektirir. Yani herkes bu şekilde gitmek istiyor. Çok bu yaklaşıma perscribe etki odaklı tasarım gibi yöntemlerin.

Yani bağlamda bütün meselesi. Ne ihtiyacınız ve ne iyi çözümdür yok. Ben bile hala basit tek kullanımlık kod bazen işlem-komut dosyası kullanabilirsiniz.

Ben İş Modelleri olarak Active Record (ya da hemen hemen aynı ORM) kullanarak iyi bir fikir birçok kez olmadığını söyledim. Anlatayım:

PHP (... ve tüm bu uzun hikaye) Open Source, Bedava olduğu gerçeği forumları içine kod dökme geliştiriciler geniş bir topluluk ile sağlayan, GitHub, böylece Google kod ve benzeri siteleri. Sen iyi bir şey olarak görebilirsiniz, ama bazen "çok iyi" olmak için değil eğilimindedir. Örneğin, bir proje ile karşı karşıya varsayalım ve PHP ile yazılmış sorunla karşı karşıya için bir ORM çerçeve kullanmak isteyen, iyi ... bir sürü olacak options to choose for:

  • Doktrin
  • Itmek
  • QCodo
  • Cansızlık
  • Redbean

Ve liste uzayıp gidiyor. Yeni projeler düzenli olarak oluşturulur. Yani bu çerçeveye dayalı bir tam şişmiş çerçeve ve hatta bir kaynak kodu jeneratörü inşa ettik düşünün. Ama "neden tekrar aynı sınıfları yazmaya?", Çünkü, sonra tüm iş sınıfları yer vermedi. Zaman geçtikçe ve yeni bir ORM çerçeve yayınlandı ve yeni ORM geçmek istiyorum, ancak veri modeli doğrudan referans kullanarak hemen hemen her istemci uygulamasını değiştirmek gerekecek.

Alt çizgi, Active Record ve ORM size Sunum Katmanı ile karıştırın eğer, uygulamanın veri katmanı olmak içindir, ben sadece koydu ettik bu örnekteki gibi sorunlar yaşayabilirsiniz.

Okuma Martin Fowler: Mendelt bilge bir deyişle @ duyun. O OO tasarım üzerine birçok kitap ve makaleleri koymak ve bu konuda bazı iyi malzeme yayınladı. Ayrıca, biz 3. parti araçlar bizim uygulama bağımlı yapmak ne olur ki, özellikle Vendor Lock In içine Anti-Patterns içine bakmak isteyebilirsiniz. Son olarak, this blog yazısı aynı konuda konuşma yazdı, bu yüzden, bunu kontrol etmek istiyorsanız.

Benim cevap herhangi bir kullanım olmuştur umuyoruz.

MVC model olarak Raylar ActiveRecord kullanımı hakkında çok şey size otomatik bir ORM (Object Relational Mapper) ve modeller arasındaki ilişkiyi oluşturmak için kolay bir yol sağlamasıdır. Işaret ettiğiniz gibi, MVC bazen eksik olabilir.

Bu nedenle, pek çok model ile ilgili bazı karmaşık bir işlem için, ben senin denetleyicisi ve modelleri arasında bir Presenter kullanmak öneririm (Rails Presenter Pattern). Presenter modelleri ve işlem mantığı agrega olur ve kolayca test edilebilir kalacaktır. Kesinlikle model veya sunum sizin tüm iş mantığını tutmak için çalışıyoruz istiyorum ve denetleyicileri dışında (Skinny Controller, Fat Model).