Tôi đang cố gắng hiểu Mô hình miền lưu hành và lý do tại sao chúng được cho là chống mẫu.Tránh mô hình miền thiếu máu - một ví dụ thực tế
Đây là ví dụ về thế giới thực.
Tôi có một lớp nhân viên, trong đó có một tấn tài sản - tên, giới tính, tên người dùng, vv
public class Employee
{
public string Name { get; set; }
public string Gender { get; set; }
public string Username { get; set; }
// Etc.. mostly getters and setters
}
Tiếp theo chúng ta có một hệ thống có liên quan đến quay cuộc gọi đến và yêu cầu trang web (được gọi là 'dẫn ') đồng đều giữa các nhân viên bán hàng. Hệ thống này khá phức tạp vì nó liên quan đến các yêu cầu round-robining, kiểm tra các ngày lễ, sở thích của nhân viên, vv Vì vậy, hệ thống này hiện được tách ra thành một dịch vụ: 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
}
}
Sau đó, trên mặt sau của mẫu yêu cầu trang web của chúng tôi, chúng tôi có mã như thế này:
public void SubmitForm()
{
var lead = CreateLeadFromFormInput();
var selectedEmployee = Kernel.Get<IEmployeeLeadRotationService>()
.SelectEmployee(lead);
Response.Write(employee.Name + " will handle your enquiry. Thanks.");
}
tôi không thực sự gặp phải nhiều vấn đề với cách tiếp cận này, nhưng được cho là đây là điều mà tôi nên chạy la hét vì đó là Mô hình miền thiếu máu.
Nhưng đối với tôi, không rõ nơi logic trong dịch vụ xoay vòng phải đi. Nó có nên dẫn đầu không? Nó có nên đi vào nhân viên không?
Điều gì về tất cả các kho được tiêm vv mà dịch vụ xoay yêu cầu - chúng sẽ được tiêm vào nhân viên như thế nào, vì hầu hết thời gian khi giao dịch với nhân viên, chúng tôi không cần bất kỳ kho lưu trữ nào?
+1 câu hỏi tuyệt vời! – mdma
Vì vậy, những gì hiện một 'ILead' trông giống như, nếu nó không phải là rõ ràng để đặt .SelectEmployee() trong nó? –
Vâng dẫn đầu trong trường hợp này là một cuộc điều tra web, vì vậy nó sẽ có một tài sản bình luận vv Nhưng chúng tôi cũng có điện thoại yêu cầu, ứng dụng, báo giá vv mà là tất cả hơi khác nhau. Giao diện ILead sẽ có các thuộc tính như LocationOfLead, TimeOfLead vv – cbp