需求描述是这样的:crm系统中。“潜在客户”归档后变为“客户”。这个“归档”需要创建一个“客户”,并删除对应的“潜在客户”。新的“客户”对象的属性值多数是来源于原来的“潜在客户对象”。
这个Archive是一个业务方法,那么它应该写在domain层中还是service(应用)层中?
如果是在domain层中,伪代码如下:
public class PreCustomer
{
public void Archive()
{
Customer customer = new Customer();
customer.xx = xx;
customer.yy = this.yy;
// 其他操作。。。
CustomerDao.Add(cutomer);
PreCustomerDao.Delete(this);
}
}
如果是在service层中,伪代码如下:
public class CustomerService
{
public void Archive(int preCustomerId)
{
PreCustomer preCustomer = ProCustomer.GetById(preCustomerId);
Customer customer = Customer.Create(preCustomer);
// 其他操作。。。
CustomerDao.Add(cutomer);
PreCustomerDao.Delete(preCustomer );
}
}
这两种方式,都能完成任务,看似也差不多。但重要的是Archive是一个业务方法,所以我倾向于放到domain中,既第一种方式。但是放到domain中问题是domain模型被dao污染了,而且这时执行Archive后PreCustomer成了一个悬浮对象了。第二种看似没什么问题,但是这种业务方法到底service层,将导致类似情况对service层不断添加代码,导致service过于厚重,从而退化成事务脚本模式了
想看看大家是怎么理解这个问题了。谢谢