Ben isterim:
- Onlara ihtiyacımız tüm sınıflar için görünür yaygın gerekli hizmetleri yapmak,
- Bir Demirbaş minimum ve ile
- edilebilirliğini ödün vermeden!
Bu küçük bir proje var ve ben DI overkill olabileceğini düşünüyorum, ama belki yanılıyorum? Her neyse, ben ServiceLocator pattern as described by Martin Fowler üzerinde yoğunlaştık
Bir istemci sınıf 'kurucu olarak, böyle bir şey var:
this->db = Locator::getDb();
this->log = Locator::getLogger();
Sonra sınıf 'yöntemler kalanı, bu üye nitelikleri aracılığıyla örneğin hizmete erişmek:
this->fooModel = new fooModel(this->db);
fooItem1234 = this->fooModel->findById(1234);
Ancak onlar birkaç farklı yerlerden erişilen çünkü ben de (yukarıda fooModel gibi) "model" nesneler için görünürlük bu düzeyde istiyorum ve birden fazla örneği olması için gerek yoktur.
Yani benim ilk düşünce bir ::getFooModel()
var Locator uzatmak oldu ama şimdi ben Locator ben yeni bir model sınıfını tanıtmak her zaman değiştirmek zorunda olacak çünkü ben, Açık / Kapalı prensibi ihlal ediyorum görünüyor.
OCP karşılamak için, ben yeterince açık değil yani ancak ben tamamen, onun gibi aynı nedenlerle bu satılan değilim (aynı zamanda Fowler sayfasında açıklanan) Dinamik Hizmet Locator kullanabilirsiniz.
Başka bir çözüm sadece tüm modeller 'yöntemleri statik yapmak olacaktır. Yani:
fooItem1234 = FooModel::findById(1234);
Sıfır klişe çünkü ben beğendim. Ben sadece yeni bir model sınıfı oluşturmak ve tek bir çizgi ile her yerden çağrı başlatabilirsiniz. Ama şimdi modeli DB bağlantısını bulmak için Belirleme bağlıdır ve ben bu konuda hissediyorum nasıl emin değilim. Şimdiye kadar ayrı veritabanı bağlantıları açık iki fooModels için gerekli eğer biri için, bir karışıklık ve / veya imkansız olurdu. O dedi, ben aslında şu anda bu seçenek biraz cazip görünüyor yapmak gerekmez.
Son olarak, DI var. Ama dediğim gibi ben bu küçük proje için çok fazla olabileceğini düşünüyorum yukarıda söyledi.
Sonuç: Ben burada takılıp biraz kulüpler ve StackOverflow uzmanları bazı tavsiye seviniriz!