Buradaki iki sentim:
Ben bir php uygulama refactoring ve yapmaya çalışıyorum mümkün olduğunca çok bağımlılık enjeksiyon vardır
Bir bağımlılık enjeksiyon çerçevesi kullanıp kullanmadığınızı belirtmezsiniz. Bence kesinlikle yapmalısın. Size ihtiyacınız olan özellikleri veren bir şey kullanın: /programming/9348376/guice-like-dependency-injection-frameworks-in-php .
Şimdi karşılaştığım sorun hangi noktada gerçekten yeni nesneler oluşturabilirim? Görünüşe göre, üst düzey bir sınıfa gidiyorum, gidecek başka bir yer olmadığı için yeni nesneler yükler. Bu yanlış geliyor.
Normalde, uygulamanızı oluşturan ilk nesnelerin somutlaştırılması için yapılandırma veya merkezi bir nokta kullanırsınız. Kap sizin için nesneleri oluşturacaktır.
Daha sonra nesnelere (hizmetler, sağlayıcılar, denetleyiciler ...) IoC kapsayıcısı üzerinden erişirsiniz. Gerekirse sizin için şeffaf bir şekilde bir nesne oluşturacak veya mevcut uygun örneğe bir referans verecektir.
Tabii ki, belirli nesne uygulamalarınız içinde DI'ye ihtiyacınız olmayan diğer nesneleri (veri yapıları, özel türler, vb.) Başlatabilirsiniz, ancak bu normal programlamadır.
Tüm nesneleri oluşturmak için fabrika sınıflarını kullanan bazı blogları okudum ve sonra fabrikayı diğer sınıflara enjekte ettiniz. Daha sonra fabrika yöntemlerini çağırabilirsiniz ve fabrika sizin için yeni nesneyi oluşturur.
Normalde, IoC çerçevesinin fabrikalarınız üzerinden bazı IoC nesnelerini başlatmasını istiyorsanız bir Fabrika kullanırsınız (bu, belirli bir nesneyi örneklemek için biraz fazladan çalışma gerektirir). Nesnelerinizi "yeni Object ()" ile oluşturabilir ve bazı özellikleri ayarlayabiliyorsanız, mutlaka bir Fabrika kalıbı kullanmak istemezsiniz.
Başka bir deyişle, bir sınıf veya sınıf grubu için bir Fabrika deseni kullanmanın, DI'yi kullanıp kullanmadığınıza değil (DI uygulamanız açıkça olağandışı olan fabrikaları gerektirmediği sürece), bu sınıfları nasıl modellemek istediğinize bağlı olduğunu söyleyebilirim.
IoC çerçevenizi, zaten bir Fabrika kullanımını gerektiren bir 3. taraf kitap kullanırken Fabrika kullanacak şekilde de yapılandırabilirsiniz. Bu durumda bunun üzerinde hiçbir kontrole sahip değilsiniz ve IoC konteynırınıza şunları söylemelisiniz: "hey, bu arayüzlerden birini istediğimde, bana uygun bir örnek sunmak için bu fabrikayı kullanmalısınız".
Bunu yapma konusundaki endişem, şimdi fabrika derslerimin herkes için yeni bir ücretsiz olacağı! Sanırım bu fabrika sınıfları olarak iyi olabilir, ancak fabrika kalıbı ve DI kullanırken yapışacak bazı kurallar var mı, yoksa buradaki işaretin dışına çıkıyorum.
Bu durumda, bu nesneler / hizmetler / denetleyiciler / herhangi bir şey için Fabrika desenlerini kullanmanız gerekmediği anlaşılıyor ve IoC'nizi uygun sınıfla "yeni" başlatacak ve diğer her şeyi enjekte edecek şekilde yapılandırabilirsiniz.
Umut ediyorum bu yardım eder.