【问题标题】:Composition, aggregation and DI组合、聚合和 DI
【发布时间】:2011-02-20 22:51:54
【问题描述】:

聚合:对象存在于另一个之外,在外部创建,因此它作为参数(例如)传递给构造函数。例如:人——汽车。汽车是在不同的环境中创建的,而不是成为个人财产。

组合:对象只存在于对方内部,或仅在对方内部才有意义,作为对方的一部分。例如:人——心。你不会创造一颗心,然后将它传递给一个人。

这是否意味着对于 DI 框架,聚合 是首选和更常见的方法,并且提高了可测试性?

这是否也意味着可以通过使用聚合来缓解 C# 等语言中缺乏多重继承的问题。我一直听到有关“组合与继承”的讨论。这是有原因的吗?

【问题讨论】:

    标签: inheritance composition aggregation


    【解决方案1】:

    委托提供了比继承更灵活的解决方案 - 有一篇名为 why extends is evil 的好文章对此进行了更多解释 - 但是哪个版本(无论是聚合还是组合)是学术性的 - 你已经确定了差异,何时使用哪一个取决于您要达到的目标。不过,缺乏多重继承通常可以通过接口来缓解。

    【讨论】:

    • 谢谢 - 我的问题是;是否应该使用聚合一词,因为所描述的原理听起来更像是聚合的定义而不是组合?
    猜你喜欢
    • 2012-07-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-21
    • 2014-11-04
    • 2015-12-08
    • 1970-01-01
    相关资源
    最近更新 更多