10 個のアトミック サービスがあり、それぞれに独自のエンティティがあります。(サービスごとに別プロジェクト)
各サービス内には、まったく同じことを行うヘルパーがありますが、エンティティによって異なります。
すべてのサービスでコードを繰り返すのをやめたいので、他の人にそのヘルパーを提供するユーティリティ サービスを作成しています。ここに私の質問があります。
ヘルパーと各サービスのエンティティとの間にこの依存関係がある場合、どうすればそれを行うことができますか?
これはヘルパーの一例です。
...
SomethingPK somethingPK = toSomethingPK(something);
SomethingEntity somethingEntity = (SomethingEntity)session.get(SomethingEntity.class, somethingPK);
somethingEntity = toSomethingEntity(something);
AnotherEntity another = new AnotherEntity();
//attribute sets
somethingEntity.setAnother(another);
...
各サービスには、Hibernate 上のマッピングされたエンティティとして、独自の SomethingPK、SomethingEntity、および AnotherEntity があります。どうすればこの接続を失うことができますか?
理にかなっていますか?
今日: のような重複コード
サービスABCプロジェクト
abc.entities.AbcType (DTO)
abc.entities.AbcEntity (Entity)
abc.entities.AbcPK (Entity's PK)
abc.entities.AbcAnotherEntity (Entity)
abc.helpers.CommonHelper (Bean)
abc.helpers.CommonHelpers.createSomethingThatIsNotBusinessLogic(Session session, AbcType abc) {
...
AbcPK key = parseToAbcPK(abc);
AbcEntity abcEntity = (AbcEntity)session.get(AbcEntity.class, key);
abcEntity = parseToAbcEntity(abc);
AbcAnotherEntity abcAnother = new AbcAnotherEntity();
AbcEntity.setAnother(another);
...
}
ServiceXYZ プロジェクト
xyz.entities.XyzType
xyz.entities.XyzEntity
xyz.entities.XyzPK
xyz.entities.XyzAnotherEntity
xyz.helpers.CommonHelper
xyz.helpers.CommonHelpers.createSomethingThatIsNotBusinessLogic(Session session, XyzType xyz) {
...
XyzPK key = parseToXyzPK(xyz);
XyzEntity xyzEntity = (XyzEntity)session.get(XyzEntity.class, key);
xyzEntity = parseToXyzEntity(xyz);
XyzAnotherEntity xyzAnother = new XyzAnotherEntity();
XyzEntity.setAnother(another);
...
}
このようなことを達成するにはリファクタリングが必要です:
サービスABCプロジェクト
abc.entities.AbcType (DTO)
abc.entities.AbcEntity (Entity)
abc.entities.AbcPK (Entity's PK)
abc.entities.AbcAnotherEntity (Entity)
ServiceXYZ プロジェクト
xyz.entities.XyzType
xyz.entities.XyzEntity
xyz.entities.XyzPK
xyz.entities.XyzAnotherEntity
ServiceUtilities プロジェクト
utilities.CommonHelper
utilities.helpers.CommonHelpers.createSomethingThatIsNotBusinessLogic(Session session, ?Type type) {
...
//same code prepared to deal with any entity, entityPK or type.
...
}