关联、聚合和组合

6
我正在处理这个问题。我正在创建数学问题,每个问题都有一个答案。例如,
  • 如果我的问题是关于“5x + 15 = 2的结果是什么?”,我只会等待一个整数答案。
  • 如果我的问题是“给我这个形状的面积和周长”,我将等待两个双精度浮点型答案。
  • 在另一个问题中,我将等待一个字符串作为答案
  • 在其他情况下,我可以有多个不同数据类型的答案或响应。
我的主要问题是:
类Question和类Response之间的关系应该如何呈现?此外,我正在思考这是否应该是关联、聚合或组合。
谢谢。
编辑:太好了,这是一个组合。最后一件事,根据上述句子,我该如何表示设计?这些是我拥有的一些想法,但我想我是错的。
public class Question
{
    public Response _response;
    //public List<Response>
    //public Dictionary<string, Response>

    public Question()
    {
        this._response = new Response();
    }
}

public class Response
{
}
2个回答

23

关联关系是一种对象之间互相关联,但它们各自都有自己的生命周期而没有所有者的关系。我们以教师和学生为例。多个学生可以与单个教师相关联,单个学生也可以与多个教师相关联,但这些对象之间没有拥有关系,它们各自独立地创建和删除。

聚合关系是关联关系的一种特殊形式,其中所有对象都有自己的生命周期,但是存在所有权:子对象不能属于另一个父对象。我们以部门和教师为例。一个教师不能属于多个部门,但如果我们删除该部门,则教师对象不会被销毁。我们可以将其视为“具有”关系。

组合关系是聚合关系的一种特殊形式,我们可以称之为“死亡”关系。它是一种强类型的聚合关系。子对象没有自己的生命周期,如果父对象被删除,则所有子对象也将被删除。我们再次以房子和房间之间的关系为例。一所房子可以包含多个房间,对于一个房间而言没有独立的生命,也不能属于两个不同的房子。如果我们删除房子,它的房间将自动被删除。再举一个示例:问题和选项之间的关系。单个问题可以有多个选项,但是一个选项不能属于多个问题。如果我们删除一个问题,则其选项也将被删除。


3

这两者之间存在关联。

问题有答案。

原因是聚合和组成都是关联。组成意味着子对象的生命周期取决于其父对象 - 子对象不能没有父对象而存在。

这正是您在此处的情况。因此 - 组成。


很好!您会推荐编写这个组合的代码吗?(请注意编辑) - Darf Zon
没有什么关系。选择适合您需求的组合类型(例如,被您的ORM框架支持的类型)。 - Wiktor Zychla

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接