Nasıl olmalı PHP composing a Controller sınıfının sorunu çözmek için:
- kolayca testable Bağımlılık Enjeksiyon kullanılarak,
- shared objects bitiş programcı sağlamak
- load new user libraries için bir yol sağlar
Look down, for controller instantiation with a Dependency injection framework
Sorun şu ki, türetilen Kontrolörleri (örn. çerçeve sağlar) programcı için ne isterse kaynakları kullanabilir olduğunu. Paylaşılan kaynaklar (DB, Kullanıcı, Depolama, Cache, Yapanlar), kullanıcı tanımlı sınıfları veya başka kitaplıklara bir birleşik erişim oluşturmak nasıl?
Elegant solution?
Orada benim sorunun birkaç olası çözüm vardır, ama ne biri şık olarak görünüyor
- constructor tarafından paylaşılan tüm nesneleri geçirmek için çalışın? (10 bile tutucular ile kurucu yaratabilir)
- Create getters, settters? (Şişirilmiş kodu)
$controller->setApplication($app)
- Uygula singletons on shared resources?
User::getInstance()
ya daDatabase::getInstance()
- Dependency Injection container kontrolör içine nesne paylaşımı için bir tek olarak kullan?
- Bir fabrika gibi bir global application singleton sağlar? (O DI ilke ve Demeter'in yasaya şiddetle karşı gider Hovewer bu bir çok php çerçeveler kullanılan görünüyor)
Ancak ben bu paradigma onlar sağlanan paylaşılan kaynaklara erişebilir olması gereken diğer programcılar (Controller sınıfı), için bir başlangıç noktası için geçerlidir nasıl bilmiyorum, güçlü çift sınıfları oluşturarak :) vazgeçiliyor ve sürgün olduğunu anlamak MVC mimarisi. Ben küçük sınıflara controller sınıfı kesiliyor şekilde MVC pratik anlamı yok edeceğini inanıyorum.
Dependency Injection Framework
DI Çerçeve uygulanabilir bir seçim gibi görünüyor. Ancak sorun hala devam etmektedir. Kontrolörü gibi A sınıfı Uygulama tabakasında bulunur, ancak RequestHandler / Response katmanda değildir.
How should this layer instantiate the controller?
- Bu tabakanın içine DI enjektörü geçmek?
- Bir tek olarak DI Çerçeve?
- Sadece bu katman için izole DI çerçeve yapılandırma koymak ve ayrı DI enjektör örneğini oluşturmak?