一般に、(コンストラクターまたはセッターを介して) エンティティーにサービスを注入し、エンティティーにそれへの参照を保持させることは悪い習慣と見なされていることを私は知っています。
しかし、メソッドを呼び出すときに Service をエンティティに一時的に渡すことは問題ないでしょうか?
たとえばname
、エンティティのフィールドをバージョン管理し、呼び出されるVersionService
たびに新しいバージョンを作成したい場合、次のsetName()
ようにできます。
public class Entity
{
public void setName(String name, VersionService service)
{
this.name = name;
service.addVersion(this, name);
}
}
このコードで私が気に入っているのは、setName()
を提供しないとメソッドを呼び出すことができないためVersionService
、目的の動作が強制されることです。をモックすることで、簡単にテストすることもできVersionService
ます。
Jimmy Bogardによるダブル ディスパッチ パターンに関する投稿で、このアプローチの例を見つけました。
しかし、スタックに関するいくつかの議論から、一般的なコンセンサスは、ドメイン モデルのサービスへの依存を避けることであると考えました。
この件について何か考えはありますか?