Yazılımımı yapılandırmak için DIC / IoC kayıt defterini ne zaman kullanacağımı ve fabrikaları ne zaman kullanacağımı, her iki yaklaşımın ardındaki gerekçe ile anlamaya çalışıyorum.
Yapılar kullanılarak yapılandırılması kolay DI konteyner (DIC) olarak StructureMap kullanıyorum. DIC'de neredeyse tüm kayıtlı nesneler statiktir, DIC yapılandırıldıktan ve DIC'de tekil olarak yapılandırıldıktan sonra çalışma zamanında herhangi bir uygulamayı / örneği değiştirmem / değiştirmem gerekmez. Benim yazılım (SW) farklı cihazlarda çalışacak Ancak, ben gereğini yapmak amacıyla benim GB çalışır buna göre donanım yapılandırılması için bu cihaza bağlı bir cihaza özgü kayıt seçin.
Bazı nesnelerimin yapılandırması yapılandırma dosyalarında okuma gerektirdiğinden, yapılandırmanın okunmasını nesnenin oluşturulmasından ayırmak için bu örnekleri DIC'ye döndürmek için fabrikaları kullanıyorum. İlgili eklenti türleri için fabrika alıcılarını DIC'ye kaydettim.
Şimdi IMotor
beton tiplerine sahip bir eklenti tipim olduğunu Motor1
ve Motor2
bir fabrika tarafından ele alınması gerektiğini söyleyin . Şimdi cihazımı nasıl yapılandıracağım konusunda iki yol var:
- Yazılımın üzerinde çalıştığı cihaz hakkında bilgi aktarıyorum
MotorFactory
ve ya doğru motoru döndürüyor yaMotor1
daMotor2
. Bu durumda karar verme mantığı Fabrika içindedir . - Bunun üzerinde çalışan ve iki fabrika oluşturmak cihaza göre DIC yapılandırmak
Motor1Factory
veMotor2Factory
bir oluşturur nerede,Motor1
ve diğerMotor2
. Bu durumda ben kayıt defteri girdilerini farklı olurduIMotor
birini kullanabilirsiniz cihaza özgü kütüklerindeMotor1Factory
veyaMotor2Factory
.
Şimdi sorum şu: Bu iki yöntemden hangisi tercih edilir ve neden? Bana göre, ilk durum düz ve kıvrımlı değil gibi görünüyor, çünkü kod tabanı boyunca hangi türün somutlaştırılacağına karar veren mantığı yayıyorum. İkinci durumda, kodumdaki fabrika sayısını etkili bir şekilde çarpıyorum, çünkü her beton türü için (neredeyse) bir fabrikaya ihtiyacım olacak. Karışıma soyut fabrikalar eklendiğinde benim için daha da kafa karıştırıcı oluyor.
Tekrar söylüyorum: Ne zaman bir yöntemi veya diğerini kullanmalıyım? Ve daha da önemlisi: Hangi yöne gidileceğine karar vermek için iyi göstergeler nelerdir?