我想了解贫血域模型以及为什么它们被认为是反模式。避免贫血域模型 - 一个真实的例子
这是一个真实世界的例子。
我有一个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.");
}
我真的不遇到这种做法许多问题,但据说这是我应该运行的东西尖叫,因为它是一个贫血域模型。
但对我来说,它并不清楚领导轮流服务的逻辑应该去哪里。它应该领先吗?它应该进入员工吗?
对于轮岗服务需要的所有注入仓库如何?他们将如何注入员工,考虑到与员工打交道的大部分时间我们不需要任何这些仓库?
+1很好的问题! – mdma 2010-05-18 05:53:20
那么,如果不明显的话,ILead是什么样子的呢?selectEmployee()呢? – 2010-05-18 05:54:13
那么在这种情况下,铅是一个网上查询,所以它会有一个评论属性等,但我们也有电话查询,应用程序,报价等,这些都是略有不同。 ILead接口将具有诸如LocationOfLead,TimeOfLead等属性 – cbp 2010-05-18 06:19:09