web-dev-qa-db-fra.com

Modèles de domaine anémique et injection de services de domaine

Le modèle de domaine anémique est décrit comme un modèle anti-motif dans la conception digne de domaine par Martin Fowler. Pour avoir une logique commerciale sur les modèles de domaine souvent utilisés des services de domaine. Mais l'injection de services de domaine dans les modèles de domaine est considéré comme nocif par Vaughn Vernon (voir "Mise en œuvre de la conception axée sur le domaine, page 387).

À mon avis, ces opinions sont contradictoires, est-ce vrai? Comment les deux points peuvent-ils être pris en compte?

Est-ce vraiment modèle de domaine riche avec des services de domaine injectés vs. modèle de domaine anémique et services de domaine normal ?

19
Sjoerd222888

Ce n'est pas contradictoire. Les deux promoteurs voudraient que vous mettiez votre code réel dans l'objet de domaine lui-même.

c'est à dire.

public class Order
{
    private string status = "not bought";
    public void Buy()
    {
        this.status = "bought";
    }
}

vs adm

public class Order
{
    public string Status = "not bought";
}

public class BuyingService
{
    public Order Buy(Order order)
    {
         Order o = new Order();
         o.status = "bought";
         return o;
    }
}

vs services injectés

public class Order
{
    public Order(IBuyingService bs)
    {
        _bs = bs;
    }
    private IbuyingService _bs;
    private string status = "not bought";
    public void Buy()
    {
        this.status = _bs.Buy();
    }
}

public class BuyingService : IBuyingService
{
    public string Buy()
    {
         return = "bought";
    }
}

Franchement, bien que chaque approche a des plus et des minus. Celui que vous choisissez est en grande partie une question de préférence personnelle

7
Ewan