Recentemente ho visto alcuni corsi Pluralshigh su DDD di Vladimir Khorikov. Era incoraggiante nel creare un rich invece di anemico modelli di dominio. Sembra tutto molto bello in un piccolo progetto di test, tuttavia non ho ancora idea di come mettere la estensiva logica aziendale all'interno del modello di dominio ricco .
Nel modello di dominio ricco dovremmo inserire la logica di dominio in entità. Quindi diciamo che vogliamo modellare un Employer
che paga lo stipendio il loro Employees
. Vedo datore di lavoro come radice aggregata qui.
Quindi aggiungiamo un metodo Employer.PayTo(someEmployeeIdentificator)
. Le regole aziendali per il calcolo dello stipendio potrebbero essere molto elaborate e dipendere da cose come:
- Paesi del datore di lavoro e dei dipendenti
- Modulo di lavoro
- Modulo per la tassazione dei dipendenti
- Quanto ha funzionato un dipendente il mese scorso
- e molto altro ancora, ottieni il punto
Potenzialmente, potrebbero esserci alcune dozzine di algoritmi. Alcuni potrebbero persino richiedere la comunicazione con servizi esterni. Un caso perfetto per il modello di strategia, ma:
- La logica doveva essere implementata all'interno delle entità
-
Employees
sono nascosti all'interno diEmployer
radice aggregata - Posso non usare
IOC
per iniettare cose nelle mie entità (di solito sono create da un ORM). E fornire gli alberi delle dipendenze non è divertente. - L'inserimento di alcune implementazioni di SalaryCalculator nell'entità
Employer
potrebbe essere una cattiva idea, poiché le calcolatrici potrebbero non essere "pure" . Potrebbero avere riferimenti ad alcune risorse esterne (ad esempio, il tracker di problemi)
Come lo modellerai?