用DDD(或有意义)建立模型关系?
这是一个简化的要求: 用户创建一个Question带有多个Answer的。Question必须至少有一个Answer。 澄清:思考Question并Answer像测试一样:有一个问题,但是有几个答案,其中几个可能是正确的。用户是准备此测试的演员,因此他创建了问题和答案。 我正在尝试对这个简单的示例进行建模,以便1)匹配现实生活模型2)用代码进行表达,从而最大程度地减少潜在的误用和错误,并向开发人员提示如何使用该模型。 问题是实体,答案是价值对象。问题包含答案。到目前为止,我已经有了这些可能的解决方案。 [A]工厂内Question 除了Answer手动创建,我们可以调用: Answer answer = question.createAnswer() answer.setText(""); ... 这将创建一个答案并将其添加到问题中。然后,我们可以通过设置其属性来操纵答案。这样,只有问题才能创造答案。此外,我们会避免没有问题的答案。但是,我们无法控制创建答案的方式,因为答案已在中进行了硬编码Question。 上述代码的“语言”也存在一个问题。用户是创建答案而不是问题的人。就我个人而言,我不喜欢我们创建值对象并依靠开发人员将其填充值-他如何确定需要添加什么? [B]工厂内部问题,参加#2 有人说我们应该在以下方法中使用这种方法Question: question.addAnswer(String answer, boolean correct, int level....); 与上述解决方案类似,此方法将强制性数据用于答案并创建一个也将添加到问题中的答案。 这里的问题是我们无缘无故地复制的构造函数Answer。另外,问题真的会产生答案吗? [C]构造函数依赖 让我们自由地自己创建两个对象。我们还要在构造函数中表达依赖权: Question q = new Question(...); Answer a = new Answer(q, ...); // answer can't exist without a question 这为开发人员提供了提示,因为不能毫无疑问地创建答案。但是,我们看不到“语言”表明答案已“添加”到问题。另一方面,我们真的需要看到它吗? [D]构造函数依赖项,采用#2 我们可以做相反的事情: Answer a1 …