1

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.
        ...
    }
4

1 に答える 1

0

解決しました!

A は共通エンティティをユーティリティ サービス プロジェクトに移動しましたが、テーブル名は空のままにしました。そして、すべてのサービスで、ユーティリティ サービスのエンティティを指す外部エンティティのマッピングを作成し、それらのテーブル名を構成しました。次に、すべての関連エンティティがそこにあったため、すべてのヘルパーを Utility Service に移動できました。したがって、最終的には、サービス間でコードが重複することはなく、サービスごとに異なるテーブルを持つことができます。

とにかく助けてくれてありがとう!解決しようとするいくつかの異なるアプローチを作成することは素晴らしいことでした.

この質問を解決済みとしてマークするにはどうすればよいですか?

于 2013-03-11T20:43:13.740 に答える