使用有时间限制的集合对聚合建模

时间:2015-08-27 03:12:00

标签: domain-driven-design aggregateroot

您如何处理具有大集/集合的聚合根?这是一个类似于我目前正在进行的具体示例:

说我正在开发一个帮助学术机构安排课程的应用程序。 “教练”可以在将来的任何时间安排“课程”(没有最大限制)。关于安排课程的不变规则表示不允许安排由同一教师重复与现有课程重叠的课程。

我的解决方案是拥有一个聚合,其根是教师计划。根本“有一个”为该教师计划的课程集合,允许通过检查上述不变量的有效性来确定该集合的一致性。

问题在于,随着系统的发展,这个计划课程列表可能会变得庞大,我认为完全加载它并不明智,因为我认为它会占用大量内存(我们在这个应用程序中一直在努力的事情。)

将课程集合加载到特定时期(如:一周或一个月)是否是一个好的设计决策?或者甚至更好的未来?

1 个答案:

答案 0 :(得分:1)

这是一个建模问题,而不是技术问题。人类总是引入有时限的集合的边界:例如财政年度,学年,或简单的时间单位。我还没有遇到一个领域 - 在花了相当多的时间之后(讽刺的是) - 我无法想出一种自然的方式来切割那些未绑定的集合。

正如@MikeSW所提到的,我们经常欺骗自己的容器/存储/父子心态以及将其转化为代码的绝望尝试。有时候只需要将它视为一种分类事物的方式。其他时候寻找缺失的概念,如自然界限可能有所帮助。

即便如此,有些事情你提到我无法进一步澄清我无法接受。首先,我不会购买"没有最大限制"。我们计划前进多远?什么是教师职业生涯的最长寿命?我们如何知道未来哪些课程将受欢迎/需求?这对课程有何影响?在另一端有一位领域专家,我可以继续这一提问。另一个奇怪的不变量是#34;同一个教练的课程不能重叠"。也许未来课程和预定课程之间存在差异。我在这个领域没什么经验,但我知道那里有专门的软件解决了为教学设施,学生和教师设置课程的难题。还要考虑一位教师将来提供的合理数量的课程。我可以想象一些准备工作进入他们。由于它是一名指导员维护他未来的课程,因此很少有合作。也许计划课程可以是一个单独的活动,也许......再一次,满足你的好奇心,答案就会到来。