Dolayısıyla, oldukça sık karşılaştığım bir durum, modellerimin ikisinden birinin başladığı durumdur:
- Tonlarca ve tonlarca yöntemle canavarlara dönüş
VEYA
- Onlara SQL parçaları geçirmenize izin verin, böylece bir milyon farklı yöntem gerektirmeyecek kadar esnekler.
Örneğin, bir "widget" modelimiz olduğunu varsayalım. Bazı temel yöntemlerle başlıyoruz:
- olsun ($ id)
- insert ($ kayıt)
- güncelleme ($ id, $ record)
- Silme ($ id)
- getList () // Widget'ların listesini alma
Hepsi iyi ve züppe, ama sonra bazı raporlara ihtiyacımız var:
- listCreatedBetween ($ start_date, $ end_date)
- listPurchasedBetween ($ start_date, $ end_date)
- listOfPending ()
Ve sonra raporlama karmaşıklaşmaya başlar:
- listPendingCreatedBetween ($ başlangıç_tarihi, $ bitiş_tarihi)
- listForCustomer ($ CUSTOMER_ID)
- listPendingCreatedBetweenForCustomer ($ customer_id, $ start_date, $ end_date)
Bunun nerede büyüdüğünü görebilirsiniz ... nihayet o kadar çok özel sorgu gereksinimimiz var ki ya tonlarca ve tonlarca yöntem uygulamak zorundayım ya da bir tür "sorgu" nesnesi geçirebileceğim tek bir sorgu> sorgu (sorgu $ query) yöntemi ...
... ya da mermiyi ısırıp böyle bir şey yapmaya başlayın:
- list = MyModel-> query ("başlangıç_tarihi> X VE bitiş_tarihi <Y VE beklemede = 1 VE müşteri_kimliği = Z")
50 milyon daha spesifik yöntem yerine böyle bir yönteme sahip olmak için belirli bir cazibe var ... ama bazen temel olarak SQL'in denetleyiciye bir yığınını doldurması bazen yanlış geliyor.
Böyle durumları ele almanın "doğru" bir yolu var mı? Bu tür sorguları genel -> query () yöntemine doldurmak kabul edilebilir mi?
Daha iyi stratejiler var mı?