4

次のシナリオのベスト プラクティスを学ぼうとしています。

更新によって変更される可能性のある定義済みのデータ オブジェクトのセットがあります。また、これらのオブジェクトの一部には、他のオブジェクトの配列が含まれています。

以下のパターンでデータベースをsqliteセットアップしました。各オブジェクトはテーブル上にあります。また、オブジェクト内に子オブジェクトがある場合はfk、子テーブルへの があります。

テーブル名とオブジェクトは変更される可能性があります。したがって、これらを簡単に変更できるようにするには、データベース呼び出しを非表示にできる必要があります。また、データベースに挿入する前にデータを検証する機能も必要です。この検証もオブジェクトごとに異なり、オブジェクトごとに異なる種類の検証を持つことができます。

現在、私はDAOfor each オブジェクトを持とうとしています。また、を使用してデータベースへのアクセスを許可するDatabaseHelperfor each オブジェクトを用意します。ContentProvidersその後、開発者は を使用しDAOて作業を行います。

本当に醜く複雑になっているようです。また、もっと簡単な方法があるようです... ContentProviders.

それで、とにかくより良いパターンに統合ContentProviderする方法はありますか? DAOまたは、この目標を達成するためのより良い方法はありますか?

どんな提案でも大歓迎です。

4

2 に答える 2

0

最近、.net でデータ アクセス レイヤーを作成しました。BusinessObjectBase クラスと BusinessObjectsBase (複数) クラスを作成しました。ただし、一般的な機能をこれらのクラスに移すことは、最初に想像したよりも困難でした。ここにいくつかのヒントがあります。

1) .Net は型付き言語 (および Java も) であるため、基本クラスの仮想関数が動作している派生クラスに関する型情報を取得する必要がありました。これを行うために、Curiously Recurring Template パターンを使用しました (ただし、自分でその有用性に気付くまで、実際には聞いたことがありませんでした): http://en.wikipedia.org/wiki/Curiously_Recurring_Template_Pattern

基本的に、これは独自の型をジェネリック パラメーターとして受け取るジェネリック クラスです。

2) 私は反省に大きく依存していました。ただし、リフレクションの方法で Java がどれだけ提供する必要があるか、またはデータ アクセス レイヤーに役立つほど高速かどうかはわかりません。ネイティブのリフレクション メソッドが遅すぎるため、ネットで見つけた無料の fasterflect ライブラリを使用する必要がありました。

3) PostSharp (Java には同じことを行うための Spring があります) を使用して変更追跡を行い、実際に変更された場合にのみオブジェクトを更新するようにしました。

4) わかりました、これが最も重要な部分です: シンプルに保ちます。奇妙な汎用パターン、リフレクション、およびアスペクト指向プログラミングを使用して目的を完全に達成したという事実にもかかわらず、私の dll の心臓部は実際には想像以上に単純でした。完璧な orm ツールを見つけるために多くの調査を行いましたが、最終的には、独自の SQL ステートメントを動的に生成する関数を記述するだけで問題ないことがわかりました。データベース内のテーブルを表すクラスと、テーブル内のフィールドを表すプロパティに属性を配置したため、ここでリフレクションが役に立ちました。このように、テーブルまたはフィールド名が変更された場合にのみ属性を変更する必要があります...

5) データベースのテーブル/フィールドを読み取り、各テーブルのクラスを含むコード ファイルを動的に生成する短いアプリ (ほぼ 1 ページに収まる) を作成しました。

さて、あなたはおそらくそれほど複雑なものを作りたくないでしょうが、私は自分の経験からいくつかのアイデアを出そうと思いました。

(ちなみに、多くの人が疑問に思っていることはわかっています。既存の ORM を使用するだけでなく、なぜそのようなトラブルを経験したのでしょうか。既存の ORM は使用するのが非常に面倒であることがわかりました。私の実装はより軽量で、私が調べたどのORMよりも高速です)

于 2012-05-03T05:20:02.677 に答える