请教一个DDD实践的问题
大家好:
假设存在一个领域实体School,它是一个聚合跟,除了基本信息外,它还包含班级列表,班级里又有学生,结构大概如下:
{
"SchoolName": "大连工业大学",
"Address": "大连",
"Class": [{
"ClassName": "计算机031",
"Students": ["王五", "李四"]
},
{
"ClassName": "计算机032",
"Students": ["王五六", "李四一"]
}
]
}
假设现在有一个需求,要在前段UI上展示学校列表,那我在领域模型里应该如何读取School实体呢,是不是从Repository里面获得N个School实体,每个实体里都完整的,包括班级和学生? 这样的话会造成不必要的数据库读取操作。
如果我只读取School的基本信息,而不读取里面的班级和学生的话,是不是要定义另一个实体LightSchool,这样的话岂不是一个概念对应了两个领域模型
或者是我定义一个SchoolDto,里面只包含School的基本信息,从Repository里面直接构造Dto?
又或者是我专门在写一个数据库操作层,直接得到Dto,而Repository专门负责得到完整得领域模型?
想请教各位在DDD实践中是如何处理这样的问题的,谢谢!
回答
建议试试 CQRS,业务查询这类没有副作用的操作可以不用在乎 DDD 的限制,怎么方便怎么来就好了。
eShopOnContainer 里就是直接 sql 语句查询的:https://github.com/dotnet-architecture/eShopOnContainers/blob/dev/src/Services/Ordering/Ordering.API/Application/Queries/OrderQueries.cs