1

私は今、Data Mapper パターンについて私が信じていることを確認しようとしています。だからここに行きます:

セクション A: データ マッパーは、別のクラスのオブジェクトを作成、更新、および削除するために使用されるクラスです。例: というクラスとCatというデータ マッパーCatDataMapper。と呼ばれるデータベーステーブルcats。ただし、 と呼ばれる xml ファイルcats.xml、または と呼ばれるハードコードされた配列である可能性もありますcats。その Data Mapper の要点は、Cat クラスを使用するビジネス ロジックを、「既存の猫を取得する方法」、または「猫を救う方法」、「猫をどこで救うか」について考えることから解放することです。Data Mapper のユーザーには、getCat(int id)、saveCat(Cat catObject)、deleteCat(Cat catObject) などの明確に定義されたメソッドを備えたブラックボックスのように見えます。

セクション B: 最初に、Cat が CatDataMapper を継承するのが賢明だと思いました。そのような関数を呼び出すと、少し便利になるからです。たとえば、catWithId(int id) のようなメソッドは静的 (クラス メソッド) であり、どこからのデータでも初期化された Cat のインスタンスを返すことができます。また、コード内で猫オブジェクトを操作する場合、myCat->save(); を呼び出すだけで済みます。Data Mapper が保存する場所に保存します (どこにどのように保存するかは気にしません。Data Mapper はこの複雑さをユーザーから隠します)。

結論として、私は今少し混乱しています ;)セクション Aは Data Mapper パターンに有効だと思いますか? また、セクション Bで説明されているように追加で行うとしたら、それは悪いことでしょうか? なんで?

4

2 に答える 2

3

あなたのセクション Aは、 Martin Fowlerによって与えられた Data Mapper パターンの定義に対応していると思います

実装言語の詳細には注意してください。セクション BではcatWithId()、クラスの静的メンバーになるとcat、メソッドのポリモーフィックな動作が妨げられる可能性があります。

Java では、JVM は宣言された参照の型に基づいて静的メソッドをディスパッチします。
これを試してみてください:
1.CatDataMapper静的メソッドを使用してクラスをcatWithId(int id)
作成します。 2. 必要なビジネス ロジックの動作をCat拡張するクラスを作成します 。 3. そのサブクラスを使用して、すべてのアクティビティをログに記録 し ます。CatDataMapper
CatLoggedCatCatDataMapper
Cat foo = new LoggedCat()
Cat bar = foo.catWithId(5)

どのメソッドが呼び出されたかに注意してくださいCatDataMapperLoggedCat

http://faq.javaranch.com/view?OverridingVsHidingでは、これに関するより詳細な説明が提供されています。

于 2009-12-28T19:02:26.297 に答える
0

これはOKなアプローチだと思います。使用されている命名規則は別として、ここではよく知られたデータ アクセス パターンに従っており、Cat オブジェクトのユーザーが CatDataMapper と対話することなく CRUD 操作を実行できるようにしています。これは私の本では常にプラスです。

あなたがJavaの世界にいるなら、これについてSpring Containerテクノロジーを検討することをお勧めします。

于 2009-12-28T20:00:26.367 に答える