その場合、私は次を使用しますMixin
:Mixin ReadingとFurther Mixin Reading
例えば:
@Mixin(MyCompare)
class DomainA {
}
@Mixin(MyCompare)
class DomainB {
}
class MyCompare {
def compare(instance1, instance2, propertyName) {
instance1[propertyName] == instance2[propertyname]
}
}
これで、DomainA と DomainB のすべてのインスタンスにメソッドが追加されますcompare
。このようにして、複数の Mixin を実装して、必要なドメイン クラスに機能を追加できます。スーパー クラスを拡張したり、サービスに実装したりする必要はありません。compare
(メソッドをこれよりももう少し洗練されたものにしたいと思うと思いますが、アイデアは得られます)
いくつかの潜在的な落とし穴:
1) 内のプライベート メソッドmixin
が機能しないようです。
2) の循環依存関係を持つことも悪いです: MixinClassA は MixinClassA で混合する MixinClassB で混合します (あなたのセットアップでは、 が他の で混合されるmixin
とは思いません)。mixin
mixin
3)メソッドの衝突で何が起こるか忘れたので、おそらく実験する必要があります。例: ClassA には doStuff() メソッドがあり、doStuff() メソッドもある DoStuffMixin に混合されます。
4) として使用しているクラスでは、 を使用しているオブジェクトのインスタンスをmixin
参照できることに注意してください。たとえば、上記の例では、 を削除してに置き換えることができます。実行時には、DomainA または DomainB のいずれかのインスタンスになります (これは mixin の非常に強力な部分だと思います)。this
mixin
instance1
this
this
これらは私が考えることができる大きな落とし穴です。