Ich versuche, anämische Domänenmodelle zu verstehen und warum sie angeblich ein Anti-Muster sind.
Hier ist ein Beispiel aus der Praxis.
Ich habe eine Mitarbeiterklasse, die eine Menge Eigenschaften hat - Name, Geschlecht, Benutzername usw.
public class Employee
{
public string Name { get; set; }
public string Gender { get; set; }
public string Username { get; set; }
// Etc.. mostly getters and setters
}
Als nächstes haben wir ein System, bei dem eingehende Telefonanrufe und Website-Anfragen (als "Leads" bezeichnet) unter den Vertriebsmitarbeitern gleichmäßig rotiert werden. Dieses System ist recht komplex, da es Round-Robin-Anfragen, die Überprüfung auf Feiertage, Mitarbeiterpräferenzen usw. umfasst. Daher ist dieses System derzeit in einen Dienst unterteilt: EmployeeLeadRotationService.
public class EmployeeLeadRotationService : IEmployeeLeadRotationService
{
private IEmployeeRepository _employeeRepository;
// ...plus lots of other injected repositories and services
public void SelectEmployee(ILead lead)
{
// Etc. lots of complex logic
}
}
Dann haben wir auf der Rückseite unseres Website-Anfrageformulars folgenden Code:
public void SubmitForm()
{
var lead = CreateLeadFromFormInput();
var selectedEmployee = Kernel.Get<IEmployeeLeadRotationService>()
.SelectEmployee(lead);
Response.Write(employee.Name + " will handle your enquiry. Thanks.");
}
Ich habe nicht wirklich viele Probleme mit diesem Ansatz, aber angeblich ist dies etwas, vor dem ich schreien sollte, weil es ein anämisches Domänenmodell ist .
Aber für mich ist nicht klar, wohin die Logik im Lead-Rotationsdienst gehen soll. Sollte es in Führung gehen? Sollte es in den Mitarbeiter gehen?
Was ist mit all den injizierten Repositorys usw., die der Rotationsdienst benötigt - wie würden sie in den Mitarbeiter injiziert, da wir im Umgang mit einem Mitarbeiter die meiste Zeit keine dieser Repositorys benötigen?
ILead
aus, wenn es nicht offensichtlich ist, .SelectEmployee () darin zu platzieren?