2009-10-05 3 views
6

私はデータアクセスレイヤーを使ってオブジェクトをパラメータで取得し、必要な永続性のタイプを抽象化して処理しました。私の新しい仕事では、建築家はCRUD操作(load..save..delete..update)をすべてのモデルオブジェクトに実装することを考えています。これらのメソッドには、オブジェクトの保存を処理するパラメータを持つオブジェクトがあります。例:負荷(IP持続性)。私は拡張性について疑念を持ち、各モデルオブジェクトはすべてのロード、保存、削除、更新メソッドを実装する必要があります。データアクセスレイヤーまたはCRUDメソッドを持つオブジェクトを持っていますか?

最良のアプローチは何ですか?

答えて

4

私はそれが永遠の問題だと思うし、両方のアプローチには長所と短所があり、それらによって誓う多くの信者がいます。

repository CRUD操作を処理するために(リポジトリ/ゲートウェイを使用して)、CRUD操作を処理するのが望ましいと思われるアプローチは、おそらくデータと検証/ビジネスルールしか含まないため、実際のビジネスクラスを小さく小さくします。

この場合、CRUD操作を1回実装しますが、扱うオブジェクトの種類ごとに1回は可能性があります。一方、特定のエンティティに対するCRUD操作がそのエンティティに固有のものであると主張するかもしれないので、そのようなエンティティを選択、更新、削除するコードは常に特定のものになるでしょう。そのオブジェクト自体の内部に存在します。

この場合、オブジェクトクラスごとにCRUD操作を1回実装します。この場合リポジトリのアプローチよりも大きな不利益はありません。

私は個人的にリポジトリに近づいていますが、 "スマートビジネスオブジェクト"アプローチでも利点があります。どちらも有効です。自分の新しいアーキテクトを説得するか、または別のアプローチで用語を取得します。

マークは

+0

私は、CRUDの基本的なケースは汎用リポジトリ(言語に応じて)で1回しか実装できないため、今後の各エンティティに特化したメソッドを実装する必要があると付け加えます。 (これはスマートなビジネスオブジェクトにもあてはまります)。 –

3

私は両方のケースでは、実装は繰り返してはならない、と思いますが、一度だけ実行され、必要に応じて(例えば)継承されました。
サブクラスとそのメソッドは、非標準ジョブ(カスタムクエリのようにカスタムパラメータを持つもの)にのみ必要です。


今の質問は、POJO哲学的な議論になります。 多くの側面がモデルのために必要とされることを考慮

  • モデルはそれぞれ特定の問題に特異的であることを考慮すると

    1. ため、各アプリケーション:私は私自身の言葉;-)でフレーズにそれを試してみましょう:永続性は、検証、ドキュメント、ユーザーインターフェイスのコンポーネントとメッセージ、ユーザーの提案、バージョン間の移行などとともに、モデルに必要な1つの側面です。一人でモデルは、理解
    2. あなたがどんな局面は、モデルオブジェクトからを外部化する必要がありますと推論維持し、その一人に、すべての面なしにマージする十分に懸命であることを考慮

    実は、私たちは(いくつかのコーディングを必要とし、一般的に)複雑なものを外部化し、(多くの場合、注釈を使用して、一般的に宣言)非常に単純ですPOJOのものに保ちます。


    モデルための技術的なスーパークラスを持たないの別の大きな利点は、モデルは、システム間の情報を運ぶために、独自の「データ転送対象」として使用することができることである。

    1. レイヤー間
    2. (例えば、シリアライゼーションを介して)JVM間(例えば、マシン間)

    モデルクラスに技術的なスーパークラスが含まれていると、そのようなさまざまな状況では役に立たないでしょう。たとえば、次のモデルオブジェクトの

    1. 持続性は、(建物の選択肢で)いくつかの層にしばしば使用可能です。たとえば、ビジネスレイヤだけが持続するデータレイヤーにアクセスできます。
    2. あるマシンから別のマシンへのデータ移行中に、各マシンはそれぞれ独自のデータベースで動作する可能性があります。したがって、モデルオブジェクトは、データベースへのポインタを持たない場合は自由に転送できます。各サーバーは独自のデータベースを使用する必要があります。 同じモデルオブジェクトの場合、同じオブジェクトによってアスペクトが保持されていない場合は、他のアスペクトでもバリエーションが可能です。
    4

    DALはすべてです。

    オブジェクトが永続性を認識しないようにトランザクションを分離できます。さもなければ、オブジェクトはデータベース往復を活性化することができ、多数のトランザクションを1つのアトミックアクションにロールバックすることは難しい、維持できない悪夢になりがちです。

    私はこれを難しい方法で見つけました。 :)

    関連する問題