Un oggetto dominio può ricevere un elenco o elementi di un elenco?

0

Supponiamo di avere un oggetto dominio, che rappresenta un cliente con un elenco di offerte.

Dire che voglio aggiungere una raccolta di offerte. Credo di avere due opzioni:

Opzione 1

Avere l'oggetto dominio caclculate le offerte e aggiungerle:

 public IEnumerable<IProduct> GetEligibleOffers(IOfferCalculator offerCalculator, IList<IProduct> products)
    {
        return offerCalculator.CalculateEligibility(Gender, Expenditure, products);
    }

    //Refactored this method.  
    public void AssignOffers(IList<IProduct> eligibleProducts)
    {
        foreach (var product in products)
        {
            _assignedProducts.Add(product);
        }
    }

Opzione 2

Chiedi al Servizio applicazioni di calcolare le offerte e passarle all'oggetto dominio uno alla volta. Pertanto l'oggetto dominio sarà simile a questo:

public IEnumerable<IProduct> GetEligibleOffers(IOfferCalculator offerCalculator, IList<IProduct> products)
        {
            return offerCalculator.CalculateEligibility(Gender, Expenditure, products);
        }

        //Refactored this method to only accept one product
        public void AddOffer(IProduct eligibleProduct)
        {
            _assignedProducts.Add(eligibleProduct);
        }

In questo caso; il servizio applicativo ottiene le offerte idonee (utilizzando: CalculateEligibility) e quindi le passa una alla volta all'oggetto dominio (Customer.AssignOffer).

Sto cercando di decidere quale approccio utilizzare (mi rendo conto che entrambi gli approcci funzioneranno). L'opzione uno sembra la più appropriata. Tuttavia, ogni esempio che riesco a trovare online sembra utilizzare l'opzione 2, ad es. questo uno e questo uno . Quindi mi chiedo se l'opzione numero due sia disapprovata per qualche motivo.

    
posta w0051977 28.01.2018 - 19:52
fonte

2 risposte

6

Innanzitutto, non pensare troppo a questo - questa è solo una questione di gusti, nient'altro. Ricorda, il generico List in C # offre un AddRange e un metodo Add per comodità (mi sto chiedendo davvero perché non l'hai usato nel tuo primo esempio), quindi non c'è nulla che ti impedisca di progettare i tuoi oggetti dominio simili, con i metodi entrambi , uno per aggiungere singoli oggetti, uno per aggiungere una raccolta. Questo è in realtà qualcosa che consiglierei nel caso in cui desideri progettare oggetti di dominio per gestire tutte le raccolte in modo uniforme.

Tuttavia, se non sei sicuro di aver mai bisogno di entrambi i metodi, e l'uniformità non è il tuo obiettivo, implementa solo il metodo che ti serve per prima, e quando in seguito dovresti usare qualcosa come AddRange in più di una volta, puoi ancora refactoring e successivamente aggiungere un altro metodo.

    
risposta data 28.01.2018 - 21:31
fonte
1

Come al solito, dipende :-) La chiave è se l'offerta è separata radice aggregata. Se lo è, usa Application Service come regola empirica della radice aggregata: non fa riferimento a un'altra entità direttamente, ma utilizza l'ID globale . Altrimenti, usa l'oggetto dominio.

    
risposta data 28.01.2018 - 23:16
fonte

Leggi altre domande sui tag