【发布时间】:2016-01-07 10:07:17
【问题描述】:
使用 UML 表示“mixin”的最佳方式是什么?
如 this article 中所述:
在面向对象的编程语言中,mixin 指的是已定义的 可以添加到类中的功能量。一个重要的 这方面的一个方面是,它可以更专注于 特定行为的属性比继承 开发过程中的结构。
我将提供有关我的特定用例的更多详细信息。 我有一组模拟不同类型对象的类。因为它们都可以存储在存储中,所以我想使用 mixin 来实现与“被存储”相关的所有功能。 当然,我可以使用抽象类,但我不喜欢它,因为这些类应该是不同层次的类的一部分,而且它们可以存储的事实只是次要属性。 另一种选择是使用组合并将“存储节点”添加为此类的字段。出于同样的原因,我也不喜欢这个选项:我不想在类和存储之间创建任何依赖关系。
我已经使用基于动态代理的 mixin 在 Java 中实现了解决方案,我想用清晰的 UML 类图记录解决方案。有没有一种标准的方式来表示这个 mixin?
我还想知道,对 mixin 的实现方式(使用代理)进行建模是否是一个好主意,或者最好使用更抽象的表示。
谢谢
【问题讨论】:
-
不是 Java 人,但在我看来,您似乎是在尝试追随一些流行趋势,而不是专注于解决具体问题。
-
我的用例描述很笼统,所以我真的不明白你怎么知道使用mixin不是一个好主意。
-
对我来说,这听起来像是“旧瓶装新酒”(反之亦然?)。
-
好的...您能否忽略用例,只描述一下如何表示mixin?我添加细节只是为了清楚我所说的 mixin 是什么意思。
-
只要我明白,酒是问题,瓶子是解决方案。我可以理解这里的“新酒”,MDA 架构和代码生成器框架都试图部分定义分类器。如果需要两个上下文,则可以聚合不同上下文中实体的行为。这就是部分描述(Mixin)发挥作用的地方。我不明白的是 Thomas Killian 在这里提到的“老酒”。对我来说,Mixins 是对技术层进步带来的新问题的回应。