9 Comments

    • 伍斌 伍斌

      课程是否能单独成为一个核心域,并为其设计限界上下文,应该取决于业务的需要及其特点。具体来说,可以从信息流动过程的完整性、所使用的领域通用语言的差异、业务触发在时间方面的差异等方面(参见https://www.infoq.com/news/2018/02/storytelling-domain-contexts/),来启发你找到核心域。对于本文中的绘画课外班来说,排课、报名和签到这3个核心域,每个内部都有各自相对完整的信息流动过程(信息都是从各处分别汇聚到一张表格中),每个核心域中的“课程”的内涵都不一样(如文中所述),三者触发的时间也不尽相同,所以可以划分这样3个核心域。而你所提到的“课程”,其相关业务目前看来已经可以由这3个核心域来完成,所以就暂时找不到单独将其划分为一个核心域的理由。但如果将来这个绘画课外班,业务发生了调整,打算做线上知识付费的业务,需要设计各种各样适合不同年龄孩子的专栏课程,那么就有可能会需要一个单独的“课程”核心域呢。

  1. snailiu

    “这里有一个问题,“排课”这个限界上下文中有“课程”这个聚集根,而“报名”这个限界上下文中也有“课程”这个聚集根,这两者是同一个概念吗?”

    “报名”限界上下文中的“课程”,应该只是“排课”上下文中的“课程”聚合根的引用吧,理论上只需要引用聚合根唯一标记?

    • 伍斌 伍斌

      在这个课外班排课的应用中,我个人认为,“排课.课程”与“报名.课程”,虽然都是各自所在限界上下文中的聚合根,但不是同一个实体。为了强化这种差异,可以把两个聚合根分别取不同的名字,比如分别是“排课”聚合根与“报名”聚合根。而两者的“课程”的数据完整性,可以由它们各自分别管理。在实现中,不建议直接在“报名”限界上下文中,直接引用“排课”限界上下文中的“课程”,而是使用“课程”ID号,来跨限界上下文,访问对方的聚合根,获取自己所需要的信息,以体现聚合根作为维护自身数据完整性的价值。

发表评论

您的电子邮箱地址不会被公开。 必填项已用*标注

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据