2016-04-19 7 views
0

私はアプリケーションを作成し、Data Mapperパターンに従っています。お互いに依存するDataMappersを処理するにはどうすればいいですか?

2つのデータマッパーが互いに依存する状況になってしまいました。具体的には、Childのオブジェクトを持つParentタイプがあります。親が変更された場合、その子のリストを取得して、それを少しずつ処理する必要があります。子が変更されると、親の状態をチェックする必要があります。これは、次のように構造化されたクラスにつながります。

class ParentMapper { 
    ParentMapper(ChildMapper childMapper) { ... } 
    void save(Parent p) { 
    Child[] children = childMapper.list(p.getId()); 
    } 
} 

class ChildMapper { 
    ChildMapper(ParentMapper parentMapper) { ... } 
    void save(Child c) { 
    Parent p = parentMapper.get(c.getParentId()); 
    } 
} 

作成されていないクラスは作成できません。

これを処理するにはどのような方法が良いですか?私はデータマッパーパターンを使用する必要はありませんが、私はそれがきれいなクリーンな抽象であることがわかりました。

これは参考用にGuiceのJavaです。

+1

両方のコンストラクタにパラメータを渡す代わりに、いずれかのクラスに子/親マッパを設定するメソッドを与えます。さもなければ、これのまわりに道は実際にありません。 – n247s

+0

Guiceは、初期化中に依存関係の1つを満たすためにプロキシオブジェクトを作成し、それをスワップします。依存関係のサイクルを自動的に処理します。特定のエラーが表示されますか? – Cardano

答えて

0

あなたの目的のために、ChildMapperはParentDomainObjectの依存関係として、ParrentMapperではなく、ChildMompperの依存関係としてChildMompperの依存関係として提供する必要があります。 そして、save()メソッド呼び出しの前に、ParentDomainObjectで少し子供を処理することができます。 Parentの状態をチェックするのと同様に、save()を呼び出す前に行うことができます。 あるデータマッパーを別のデータマッパー内で使用し、それらを互いに依存させるのは良い方法ではないという考えがあります。

Using data mapper inside another data mapper in Java?

私は、これはChildDomainObjectを変更するParentMapperの責任であると思いますし、その逆もまた同様で `tを。

関連する問題