나는 빈혈 도메인 모델을 이해하려고 시도하고 있으며, 왜 그들이 안티 패턴일까요?빈혈 영역 모델 회피 - 실제 사례
실제 세계의 예입니다. 이름, 성별, 이름, 등
public class Employee
{
public string Name { get; set; }
public string Gender { get; set; }
public string Username { get; set; }
// Etc.. mostly getters and setters
}
다음으로는 '리드로 알려진 걸려 오는 전화와 웹 사이트 문의 (회전 포함하는 시스템을 가지고 -
나는 특성의 톤을 가진 Employee 클래스를 가지고 ')를 판매 직원들 사이에 고르게 제공합니다. 이 시스템은 라운드 로빈 문의, 휴일, 직원 선호도 확인 등을 포함하여 매우 복잡합니다. 따라서이 시스템은 현재 서비스로 분리되어 있습니다 : EmployeeLeadRotationService.
public void SubmitForm()
{
var lead = CreateLeadFromFormInput();
var selectedEmployee = Kernel.Get<IEmployeeLeadRotationService>()
.SelectEmployee(lead);
Response.Write(employee.Name + " will handle your enquiry. Thanks.");
}
난 정말이 방법에 많은 문제가 발생하지 않지만, 아마도 이것이 내가 실행해야 뭔가 :
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
}
}
은 다음 웹 사이트 문의 양식의 뒷면에 우리는이 같은 코드를 비명지기 때문에 빈혈 도메인 모델입니다.
하지만 리드 회전 서비스의 논리가 어디로 가야하는지 명확하지 않습니다. 선두에 있어야합니까? 직원에게 들어가야합니까?
로테이션 서비스에 필요한 모든 주입 리포지토리는 무엇인가? 직원을 대할 때 대다수의 리포지토리가 필요하지 않으므로 대부분 직원에게 주입되는 방법은 무엇입니까?
+1 큰 질문입니다. – mdma
그렇다면 .SelectEmployee()를 넣는 것이 명확하지 않으면 'ILead'모양이 어떻게 될까요? –
이 경우 리드는 웹 문의이므로 댓글 속성 등을 갖습니다.하지만 전화 문의, 응용 프로그램, 따옴표 등은 모두 약간 다릅니다. ILead 인터페이스는 LocationOfLead, TimeOfLead 등의 속성을가집니다. – cbp