Я намагаюся зрозуміти моделі анемічних доменів і чому вони нібито є анти-зразком.
Ось приклад із реального світу.
У мене є клас Employee, який має безліч властивостей - ім'я, стать, ім'я користувача тощо
public class Employee
{
public string Name { get; set; }
public string Gender { get; set; }
public string Username { get; set; }
// Etc.. mostly getters and setters
}
Далі ми маємо систему, яка передбачає рівномірну ротацію вхідних телефонних дзвінків та запитів веб-сайтів (відомих як "потенційні клієнти") серед торгового персоналу. Ця система є досить складною, оскільки включає розбійні запити, перевірку святкових днів, уподобання співробітників тощо. Отже, ця система в даний час відокремлена від служби: 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
}
}
Тоді на зворотній стороні форми запиту нашого веб-сайту ми маємо такий код:
public void SubmitForm()
{
var lead = CreateLeadFromFormInput();
var selectedEmployee = Kernel.Get<IEmployeeLeadRotationService>()
.SelectEmployee(lead);
Response.Write(employee.Name + " will handle your enquiry. Thanks.");
}
Я насправді не стикаюся з багатьма проблемами при такому підході, але нібито це те, від чого мені слід кричати, бо це анемічна модель домену .
Але для мене незрозуміло, куди повинна йти логіка в службі обертання свинців. Чи це повинно йти в лідерах? Це повинно йти у працівника?
Що можна сказати про всі введені сховища тощо, які вимагає служба ротації, - як вони вводяться в працівника, враховуючи, що більшу частину часу при спілкуванні з працівником нам не потрібні жодні з цих сховищ?
ILead
вигляд, якщо в нього не очевидно помістити .SelectEfficiee ()?