2016-04-15 65 views
0

我有应用DDD大多数网上找到的例子是不是太复杂或过于简单(产品/ ItemOrder型)以下招聘系统上应用DDD

我有一个招生制度的问题, 一个部门可以有一个职业(专业不能没有一个部门就存在) 一个招聘渠道可能有一些招聘来源(一个招聘来源不可能没有招聘频道) 现在我有一个申请人不能没有专业而不能存在并且不能存在没有招聘来源。 此外,如果没有候选人(但是我看到这样通过domainevents接收通知的面试日历另一个有界范围内的面试部分)

我想了解如何提取不存在的面试什么是什么在DDD AggregateRoot等方面(这里我相信我有两个竞争对手部门和招聘频道) 鉴于我选择了其中一个,我将如何处理另一个?

也许我错了。如果任何人都可以照亮我,这将是非常有益的。

+1

您正试图将DDD概念应用于通过一些约束条件简单连接的一组对象。这不是一个有用的领域模型。 – Aryeh

+0

我这样做是因为它是在域驱动设计基础知识中使用的复数形式她解释说她知道一个实体必须是聚合的一部分“它不能没有”。 – user3308583

回答

1

似乎,你没有ask right questions给你的领域专家。 你在这里得到的所有信息都是可以/不能与别的东西一起存在的东西。 你知道what does职业,部门,系统背景下的面试吗?
您的要求都是关于数据(表格关系),而不是behaviour本身。

DDD中,你把verbs的过过名词。你把它们作为你的聚合方法。然后,根据事务边界选择聚合边界(它是否需要与此相关,或者可以等待?)。

  • 首先询问您的域专家有关约requirements的系统。它应该提供什么功能。
  • 然后询问user stories,这只是系统的简单用法。但是don't talk about the front! 这是not user story - 当用户点击购买按钮并提交表单,然后他购买产品 这可能是你user story - 作为一个用户,当我买车,我一个VIP我应该得到20%的折扣,所以我会再拍买不久

从用户故事,你可以提取一些有用的信息,这是超过例如:“商店可以有多个产品,但产品也可以有一个标题” 我希望你能明白一点。

关于如何聚集模型,看看这里Vaughn Vernon

3

也许我会约了错误的方式。如果任何人都可以照亮我,这将是非常有益的。

步骤#1:寻找无处不在的语言。与你的领域专家一起坐下来,并且非常小心地注意他们所谈论的实体。

例如:

申请人不能没有职业存在和不具有招募源可以不存在。

这似乎有点奇怪。我期望一个申请人是一个人,而人们当然没有“招聘来源”(不管是什么)。如果您要说如果没有招聘来源,应用程序不可能存在,或者更好的是应用程序总是由招聘来源引用,我更可能相信您实际上正在与该领域的专家交谈。

域模型不描述结构;域模型控制变化

除非您了解模型允许的更改,否则无法对集合进行明智的设计决策。或者更好地说,哪些变化是允许的 而不是

识别实体是建模工作的一部分,但您确实需要注意哪些实体从属于该模型。例如,考虑客户vs账户;该模型可能无法控制客户(您的模型能否阻止人们更改他们的名字或移动?),但它可能能够控制帐户(暂停,跟踪促销优惠,提升为VIP身份)。

启发式:如果您的业务无法控制它,那么您的模型也无法控制它。