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 IMotorbeton tiplerine sahip bir eklenti tipim olduğunu Motor1ve Motor2bir 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
MotorFactoryve ya doğru motoru döndürüyor yaMotor1daMotor2. Bu durumda karar verme mantığı Fabrika içindedir . - Bunun üzerinde çalışan ve iki fabrika oluşturmak cihaza göre DIC yapılandırmak
Motor1FactoryveMotor2Factorybir oluşturur nerede,Motor1ve diğerMotor2. Bu durumda ben kayıt defteri girdilerini farklı olurduIMotorbirini kullanabilirsiniz cihaza özgü kütüklerindeMotor1FactoryveyaMotor2Factory.
Ş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?