聚合:对象存在于其他对象之外,在外部创建,因此它作为参数(例如)传递给构造函数。例如:人——汽车。汽车是在不同的环境中创建的,而不是成为个人财产。
构图:对象只存在于对方内部,或仅在对方内部才有意义,作为对方的一部分。例如:人——心。你不会创造一颗心,然后将它传递给一个人。
这是否意味着对于 DI 框架,聚合是首选和更常见的方法,并提高了可测试性?
这是否也意味着可以通过使用聚合来缓解 C# 等语言中缺乏多重继承的问题。我一直听到有关“组合与继承”的讨论。是否有一个原因?
聚合:对象存在于其他对象之外,在外部创建,因此它作为参数(例如)传递给构造函数。例如:人——汽车。汽车是在不同的环境中创建的,而不是成为个人财产。
构图:对象只存在于对方内部,或仅在对方内部才有意义,作为对方的一部分。例如:人——心。你不会创造一颗心,然后将它传递给一个人。
这是否意味着对于 DI 框架,聚合是首选和更常见的方法,并提高了可测试性?
这是否也意味着可以通过使用聚合来缓解 C# 等语言中缺乏多重继承的问题。我一直听到有关“组合与继承”的讨论。是否有一个原因?
委托提供了比继承更灵活的解决方案——有一篇好文章叫做为什么扩展是邪恶的,它对此进行了更多解释——但是哪个版本(无论是聚合还是组合)是学术的——你已经确定了差异,以及哪个版本使用何时取决于您要达到的目标。不过,缺乏多重继承通常可以通过接口来缓解。