Veri erişimi / iş nesneleri için ActiveRecord desenini kullanmanın sakıncaları nelerdir merak ediyorum. Kafamın üstünden düşünebildiğim tek şey, Tek Sorumluluk İlkesini ihlal ettiğidir, ancak AR modeli, yalnızca bu nedenin, kullanmamayı haklı çıkarmak için "yeterince iyi" görünmediği kadar yaygındır (tabii ki benim Çalıştığım kodun hiçbiri SOLID ilkelerinden herhangi birini takip etmediğinden , görünüm eğrilebilir .
Şahsen ben değil o sınıfın gibi hissediyor çünkü çok fazla yapıyor (AR "doğal" hisseden bir Ruby on Rails uygulama, yazma hariç) ActiveRecord hayranıyım ve veri erişim sınıfına kendisine kadar olmamalı ele almak için. İş nesnelerini döndüren havuzları kullanmayı tercih ederim. Çalıştığım kodun çoğu, (yöntemin neden bir boole olduğunu bilmiyorum) biçiminde bir ActiveRecord varyasyonunu kullanma eğilimindedir:
public class Foo
{
// properties...
public Foo(int fooID)
{
this.fooID = fooID;
}
public bool Load()
{
// DB stuff here...
// map DataReader to properties...
bool returnCode = false;
if (dr.HasRows)
returnCode = true;
return returnCode;
}
}
veya bazen, public static Foo FindFooByID(int fooID)
bulucular için bir yönteme ve public void Save()
tasarruf / güncelleme hatlarında bir şeylere sahip olmanın "geleneksel" yoludur .
Ben ActiveRecord hayata geçirilmesi ve kullanımı genellikle çok daha kolaydır olsun, ama biraz görünüyor çok karmaşık uygulamalar için basit ve daha kolay değiş tokuş etmek zorunda saymıyorum bir Deposu (içinde veri erişim mantığı sararak daha sağlam bir mimariye sahip olabilir veri erişim stratejileri, örneğin belki Stored Procs + DataSets kullanıyorsunuz ve LINQ ya da başka bir şeye geçmek istiyorsunuz.
Öyleyse, ActiveRecord'un iş için en iyi aday olup olmadığına karar verirken göz önünde bulundurulması gereken bu modelin diğer sakıncaları nelerdir?