首页 新闻 会员 周边

请教一个DDD实践的问题

0
悬赏园豆:80 [已解决问题] 解决于 2021-04-17 10:43

大家好:

假设存在一个领域实体School,它是一个聚合跟,除了基本信息外,它还包含班级列表,班级里又有学生,结构大概如下:

{
	"SchoolName": "大连工业大学",
	"Address": "大连",
	"Class": [{
			"ClassName": "计算机031",
			"Students": ["王五", "李四"]
		},
		{
			"ClassName": "计算机032",
			"Students": ["王五六", "李四一"]
		}
	]
}

假设现在有一个需求,要在前段UI上展示学校列表,那我在领域模型里应该如何读取School实体呢,是不是从Repository里面获得N个School实体,每个实体里都完整的,包括班级和学生? 这样的话会造成不必要的数据库读取操作。

如果我只读取School的基本信息,而不读取里面的班级和学生的话,是不是要定义另一个实体LightSchool,这样的话岂不是一个概念对应了两个领域模型

或者是我定义一个SchoolDto,里面只包含School的基本信息,从Repository里面直接构造Dto?

又或者是我专门在写一个数据库操作层,直接得到Dto,而Repository专门负责得到完整得领域模型?

想请教各位在DDD实践中是如何处理这样的问题的,谢谢!

DDD
会长的主页 会长 | 专家六级 | 园豆:12401
提问于:2021-01-22 09:14
< >
分享
最佳答案
0

建议试试 CQRS,业务查询这类没有副作用的操作可以不用在乎 DDD 的限制,怎么方便怎么来就好了。

eShopOnContainer 里就是直接 sql 语句查询的:https://github.com/dotnet-architecture/eShopOnContainers/blob/dev/src/Services/Ordering/Ordering.API/Application/Queries/OrderQueries.cs

收获园豆:80
沈星繁 | 小虾三级 |园豆:1096 | 2021-01-22 10:15

谢谢,我看一下

会长 | 园豆:12401 (专家六级) | 2021-01-22 10:25
其他回答(2)
0

我现在的做法是新建一个实体,虽然有时候自己都会乱。前端需要什么数据就只给什么数据,别想从我这里多拿一个字段。

仰望繁星的猪 | 园豆:514 (小虾三级) | 2021-01-22 09:29
0

这种只是显示详细列内页才用到这个所有数据用这个School...
EF分延迟加载和立即加载,延迟加载前端要什么数据才去查询,立即加载就会把所有关联数据一起查出来。
如果数据很多可以.Select(new{列显想要的字段})

为乐而来 | 园豆:1432 (小虾三级) | 2021-01-22 11:54

你是说跳过领域类吗?不实例化领域类?

支持(0) 反对(0) 会长 | 园豆:12401 (专家六级) | 2021-01-22 13:45

@会长: 为啥一直要强调DDD,模式是固定的,你开发一个东西为啥要强制用这样的方式,如果你有需要就再建一个SchoolVo或者叫SchoolView...

支持(0) 反对(0) 为乐而来 | 园豆:1432 (小虾三级) | 2021-01-22 17:13

@为乐而来: SchoolView这个办法不错

支持(0) 反对(0) 会长 | 园豆:12401 (专家六级) | 2021-01-23 17:32
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册