Durante una conversazione con il nostro esperto di domini possiamo utilizzare questa funzione:
A Customer service agent can cancel an Order by decreasing its quantity. To cancel an Order we decrease its quantity by the specified quantity, change its status to either partially cancelled or fully cancelled and log the CS agent who issued the cancellation.
Attualmente siamo divisi tra diverse soluzioni (supponendo che abbiamo agentId
, orderId
e cancelledQty
dalla richiesta):
Soluzione 1:
CSAgent agent= (CSAgent) EmployeeRepository.getById(agentId);
Order order= OrderRepository.getById(orderId);
agent.cancel(order,cancelledQty);
vs
Soluzione 2:
CSAgent agent= (CSAgent) EmployeeRepository.getById(agentId);
Order order= OrderRepository.getById(orderId);
order.cancel(cancelledQty,agent);
La soluzione 1 cattura davvero ciò che i requisiti stanno trasmettendo e legge molto bene; tuttavia, soluzione 2 sembra più naturale quando si codifica l'implementazione del metodo cancel () in quanto aggiornerò principalmente i campi nella classe Order
stessa che spero di mantenere private
senza nessun setter pubblico .
L'unica cosa di cui ho bisogno dalla classe CSAgnet
è un'istantanea dei suoi dati da memorizzare con Order
.
Quindi, come devo determinare la migliore linea d'azione da una prospettiva DDD?