SORU
29 Ocak 2011, CUMARTESİ


Neden varlıklar/iş nesneleri için bağımlılıkları çözmek için IoC konteyner kullanmak değil mi?

Dİ arkasında kavramı anlıyorum, ama sadece farklı bir IoC konteyner neler yapabileceğini öğreniyorum. Çoğu insan IoC konteyner vatansız hizmetleri Tel kullanarak savunan, ama varlıkları gibi görünüyor?

Doğru ya da yanlış olsun, ben normalde eğer bu davranış dışında bir sınıf gerektiriyorsa bile davranışı ile benim varlıkları şeyler. Örnek:

public class Order : IOrder
{

    private string _ShipAddress;
    private IShipQuoter _ShipQuoter;

    public Order(IOrderData OrderData, IShipQuoter ShipQuoter)
    {
        // OrderData comes from a repository and has the data needed 
        // to construct order
        _ShipAddress = OrderData.ShipAddress;  // etc.
        _ShipQuoter = ShipQuoter;

    }

    private decimal GetShippingRate()
    {
        return _ShipQuoter.GetRate(this);
    }
}

Gördüğünüz gibi, bağımlılıklar Yapıcı Enjekte edilir. Bir kaç soru için şimdi.

  1. Kabul kötü uygulama varlıklar ShipQuoter gibi dışarıdan derslere bağlı olması mı? Bu bağımlılıkları ortadan kaldırmak eğer bu tanım doğru anladıysam kansız bir etki alanı bana doğru yol gibi görünüyor.

  2. Kötü uygulama bu bağımlılıkları gidermek ve gerektiğinde bir varlık inşa etmek için IoC konteyner kullanımı kolay mı? Bunu yapmak mümkün mü?

Herhangi bir fikir için teşekkürler.

CEVAP
29 Ocak 2011, CUMARTESİ


İlk soruyu cevaplamak için en zor olandır. Kötü uygulama Varlıkları dışında derslere bağlı olması mı? Kesinlikle yapmak en yaygın şey değil.

Örneğin, sizin tarafa bir Depo enjekte eğer etkili bir şekilde Active Record pattern uygulaması var. Bazı insanlar (benim gibi) Single Responsibility Principle (SRP) aykırı olduğu için bu kod koku ve anti-desen olarak görürken sağladığı kolaylık sağlamak için bu model gibi.

Varlıklar diğer bağımlılıkları enjekte aynı yönde (SRP uzak) çeker söyleyebiliriz. Öte yandan kesinlikle bu işi bilmiyorsun. öyleyse çekin Anemic Domain Model Bir doğru olduğu doğru.

Karşısında neden o anlatıyor Greg Young'ın () abandonded paper on DDDD ben gelene kadar uzun bir süre için bu ile mücadele ettin-tier/n-katman basmakalıp mimarisi her zaman CRUDy olacak(ve böylece daha kansız.

Modelleme Etki alanı nesneleri etmek bizim odak noktası olarak hareketKomutlar ve Olaylarİsimler yerine bizim nesne yönelimli uygun bir etki alanı modeli oluşturmak için etkinleştirmek için.

İkinci soruyu cevaplamak için daha kolay olur. Her zaman Abstract Factory to create instances at run-time bir kullanabilirsiniz. Windsor Kalesi ile bile Yazılan Fabrika Tesisi, el ile fabrikalar uygulama yükünü koruyan kullanabilirsiniz.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Djbasilio AuToBaSs

    Djbasilio Au

    20 Aralık 2008
  • psidot

    psidot

    2 Kasım 2006
  • Viktorija A.

    Viktorija A.

    28 Mart 2009