Stavo leggendo questo articolo recentemente: link
Lo scrittore consiglia una classe come questa:
public sealed class AtmService // Domain service
{
public void WithdrawMoney(Atm atm, decimal amount)
{
if (!atm.CanDispenseMoney(amount))
return;
decimal amountWithCommission = atm.CalculateAmountWithCommission(amount);
Result result = _paymentGateway.ChargePayment(amountWithCommission);
if (result.IsFailure)
return;
atm.DispenseMoney(amount);
}
}
Perché il metodo WithdrawMoney non va nella classe ATM anziché nella classe ATMService? Sicuramente questo è quasi tanto grave quanto mettere tutta la logica di dominio nel servizio dell'applicazione?
D1) È una pratica scorretta utilizzare un oggetto dominio A (o un elenco di oggetti dominio A in un oggetto dominio B quando l'oggetto dominio A (o l'elenco dell'oggetto dominio A) non è una variabile di istanza dell'oggetto dominio B? Ad esempio :
public class Customer
{
bool valuedCustomer=false;
public void IsValuedCustomer (List<Order> orders)
{
if (orders.Count > 100)
{
//Do some more logic here e.g. look how much they have spent etc
valuedCustomer = true;
}
}
}
Qui l'Elenco ordini viene passato alla classe Cutomer in modo che possa essere determinato se sono un cliente stimato.
Q2) È un servizio di dominio appena usato per calcolare un valore (potrebbe essere oggetto, elenco ecc.) che non è una variabile di istanza di un'entità / valore?
Aggiorna
In seguito alla risposta di Ewan. Diciamo che ho avuto una classe come questa:
public class Customer
{
List<Offer> offers = List<Offer>(); //this is the offers the customer is entitled to e.g. two offers out of ten.
public void AssignOffers (List<Offer> offers)
{
//All available offers (say 100) are passed to this method
//There is logic here to figure out what offers the person is entitled to (this could be a LINQ query). If the person is entitled to an offer then add it to the instance variable list
}
}