Anche dopo aver letto un mucchio, sto ancora cadendo nella stessa trappola. Ho una classe, di solito un'entità. Devo implementare più di una, operazioni simili su questo tipo. Sembra sbagliato (apparentemente arbitrariamente) scegliere una di queste operazioni per appartenere all'entità e spingere gli altri in una classe separata; Finisco per spingere le operazioni tutte alle classi di servizio e sono rimasto con un dominio anemico.
Come esempio grezzo, immagina la tipica classe Employee con proprietà numeriche per contenere il numero di giorni retribuiti a cui il dipendente ha diritto sia per malattia che per ferie e una serie di giorni presi per ciascuno.
public class Employee
{
public int PaidHolidayAllowance { get; set; }
public int PaidSicknessAllowance { get; set; }
public IEnumerable<Holiday> Holidays { get; set; }
public IEnumerable<SickDays> SickDays { get; set; }
}
Voglio due operazioni, una per calcolare le vacanze rimanenti, un'altra per i giorni di malattia pagati. Sembra strano includere, ad esempio, CalculateRemaingHoliday () nella classe Employee e bump CalculateRemainingPaidSick () in una classe di PaidSicknessCalculator. Vorrei finire con un PaidSicknessCalculator e un RemainingHolidayCalculator e l'entità Employee anemica come visto sopra. L'altra alternativa sarebbe quella di mettere entrambe le operazioni nella classe Employee e dare la Responsabilità Unica al freno. Ciò non rende il codice particolarmente gestibile.
Suppongo che la classe Employee debba avere una logica di inizializzazione / convalida (non accettare invenzioni negative ecc.) Quindi forse mi limito ad inizializzare e convalidare in modo semplice nelle entità stesse ed essere felice con le mie classi di calcolatrici separate. O forse dovrei chiedermi se Anemic Domain mi sta causando alcuni problemi tangibili con il mio codice.