我在查看 POCO和DTO的区别 (似乎POCO是带有行为(方法?)的DTO),并发现Martin Fowler关于无力的域模型的这篇文章。
由于理解不足,我认为我创建了一个无力的域模型。
在我的应用程序中,我将业务域实体定义在'dto' dll中。它们有很多具有getter和setter但没有太多其他内容的属性。我的业务逻辑代码(填充、计算)在另一个'bll' dll中,数据访问代码在'dal' dll中。我认为这是“最佳实践”。
因此,通常我会这样创建一个dto:
dto.BusinessObject bo = new dto.BusinessObject(...)
并将其传递给 BLL 层,如下所示:and pass it to the bll layer like so:
bll.BusinessObject.Populate(bo);
接着执行一些逻辑并将其传递到dal层,如下所示:
dal.BusinessObject.Populate(bo);
根据我的理解,要将我的DTO转换为POCO,我需要将业务逻辑和行为(方法)作为对象的一部分。因此,与上面的代码不同,应该更像:
poco.BusinessObject bo = new poco.BusinessObject(...)
bo.Populate();
例如,我在对象上调用方法而不是将对象传递给方法。我的问题是 - 如何做到这一点并仍保留“最佳实践”的关注层次(分离的dll等)。 在对象上调用方法是否意味着该方法必须在对象中定义?
请帮助我解开疑惑。