È accettabile per un'entità di dominio implementare un'interfaccia?

1

Vedi la domanda qui: link

Il consenso generale è che i modelli di dominio non dovrebbero contenere interfacce. Ora guarda qui: link e in particolare questo codice:

public Offer AssignOffer(OfferType offerType, IOfferValueCalculator valueCalculator) 
        { 
            DateTime dateExpiring = offerType.CalculateExpirationDate(); 
            int value = valueCalculator.CalculateValue(this, offerType); 


            var offer = new Offer(this, offerType, dateExpiring, value); 


            _assignedOffers.Add(offer); 


            NumberOfActiveOffers++; 


            return offer; 
        } 

L'autore se questo blog scrive molto su DDD.

Si noti che qui viene iniettata un'interfaccia nel metodo anziché un tipo concreto, cioè IOfferValueCalculator implementa OfferValueCalculator.

Sto parlando dal punto di vista di un purista del DDD. È accettabile che le entità di dominio implementino le interfacce? Se la risposta è sì, allora in quali circostanze sarebbe accettabile iniettare un IOfferCalculator in un'entità di dominio: Membro?

Ancora una volta mi rendo conto che l'approccio DDD non è una taglia unica e che un modello di dominio anemico è adatto in molti casi. Sto solo cercando di migliorare la mia conoscenza di questo specifico settore.

    
posta w0051977 22.01.2018 - 12:46
fonte

1 risposta

7

IOfferValueCalculator non è un'entità di dominio. È un servizio. Quindi è perfettamente adatto per essere un'interfaccia.

E c'è qualche sfumatura nella domanda "Should entities implement interfaces". Se è vero che la creazione di un'interfaccia solo perché sia implementata da una singola entità è una complessità inutile. Non c'è nulla di sbagliato in più entità che implementano un'unica interfaccia, in quanto tali entità potrebbero essere utilizzate in modo intercambiabile nel codice, che esegue la stessa logica su tutte le entità.

    
risposta data 22.01.2018 - 12:51
fonte

Leggi altre domande sui tag