【发布时间】:2017-05-05 19:21:02
【问题描述】:
我有一个带有存储库、服务层、使用 EF6 和代码优先 POCO 的项目。在 CustomerRepository 中,我正在执行几个返回对象的投影查询。
我知道代码优先的 POCO 会被视为“域模型”,但如果我要对不同的模型进行投影查询,该模型会被视为什么?这方面的一个例子是CustomerOrderStats。那仍然是领域模型,还是应该被视为 DTO 模型?
例子
从存储库返回的对象:
public class CustomerOrderStats
{
public string Name { get; set; }
public int Count { get; set; }
}
在存储库中查询
public CustomerOrderStats GetCustomerOrderStats(Guid customerGuid)
{
return customers
.Where(c => c.Guid == customerGuid)
.Select(new CustomerOrderStats
{
Name = c.Name,
Count = c.Orders.Count()
};
}
【问题讨论】:
-
对我来说,您的
CustomerOrderStats类只是一个包含一组属性的 DTO。领域模型通常倾向于包含行为/业务逻辑以保护不变量并强制执行业务规则。 -
如果某些东西是 POCO,它不会使它们成为 DTO。 DTO 的目的是提供对 DOMAIN 的简化视图。通常应用层使用DTO,业务层和数据层使用DOMAIN。
标签: c# domain-driven-design repository-pattern