Hızlı background: PHP programlama, ben ayrı bir veri erişim katmanı DB veri alma ve etki sınıfları oluşturmak için sorumludur (DAO sınıfları) ile bir etki alanı modeli var.
Diyelim ki group ve groupList nesneleri oluşturmak için sorumlu bir DAO sınıf var diyelim. Bir sosyal ağ bileşeni olarak gruplarını tahmin edebilirsiniz; Gerçekten bu soruya ne de umrumda değil.
Ben farklı farklı kriterlere göre beni çeşitli groupList nesneleri yapmak için DAO sormak gerekiyor:
- en son eklenen grupları
- En popüler gruplar
- bir yönetici tarafından "özellikli" olarak tanımlanan gruplar
- grupları, belli bir etiket ile etiketlenmiş
- Belirli bir anahtar kelimeyle eşleşen grupları
- belli bir kategori içindeki grupların
- belirli bir kişi tarafından oluşturulan gruplar
- Belirli bir günde oluşturulan gruplar
Bunlardan bazıları ben aslında şu vea ihtiyacım yok, ama ben tür ben proje bitince önce bunları gerekir hayal edebiliyorum. Şimdi ben güzel bir basit DAO yöntemi ile başladı: createList. Bu harika çalıştı. : Sen olarak sahte kod düşünebilirsiniz
find out how many groups
create SQL query to fetch group details
loop through results
{
create group object
add to group list object
}
Benim uygulama ilerledikçe, o zaman yeni bir yöntem yarattı createFeaturedList. Bu harika çalıştı. Ama bu biraz daha farklı bir sorgu, aslında createList çok benzer oldu. Kod ~ 150 hatlarının geri kalan bir çok aynıydı.
Yani ... what should I do about all the slightly different cases I need? Çoğu zaman ben gerçekten sadece belli kriterlere göre listeyi filtrelemek ve sıralamak istiyorum. Soru bu - gerekir I:
a) gibi odaklı yaradılış yöntemin birçok oluşturmak:
- createList ()
- createCategoryList (categoryObject)
- createUsersList (UserObject)
- createTagList (tag)
- createPopularList ()
or
b) create one BIG method that can do everything: - createList ( searchString, orderBy, filterByCategoryObject=null, filterByUserObject=null )
Ben oldukça bir fikir gibi (a) benim DAO arayüzü basit ve (örn: aniden karşı karşılaştırmak için date geçmesi gerektiğinde başka bir parametre ekleyerek) değiştirmek gerekir olasılığı daha azdır, çünkü zorluk geliyor Eğer diğer parametreleri ile birleştirmek mümkün olmak istiyorum arama anahtar gibi şeyler varsa; örneğin: (a) ile yola başladım ne tür .., kategori listesi arveı popüler liste arveı, vb tag listesini aradı.
I (b) için üstlenmeden ile bir flört yaşadım ama çok, benim yöntemi oldukça hızlı, çok büyük ve çok karmaşık oluyor görebiliyorum "eğer" ler ve SQL oluştururken farklı davalarına s "seçme" ve yöntemi beslenir parametrelerin çok. Ama en azından tek bir yerde bulunuyor. Ve bir şeyler birleştirebilirsiniz; örneğin: Bir kullanıcının grupları, anahtar kelimeler vesaire eşleşen, vesaire ile etiketledi.