単純なオームの開発

java orm
単純なオームの開発

CRUD機能を実行するシンプルなオームを開発したいのですが、リフレクションを使用しますか? 休止状態のようなライブラリはリフレクションを使用しますか?? 反射を使用すると、スパイが大幅に低下しますか?

  3  0


ベストアンサー

はい ただし、独自のローリングを開始する前に、http://en.wikipedia.org/wiki/List_of_object-relational_mapping_software [既存のORMソリューション]を最初に確認することをお勧めします。

5


単純なORMはhttp://java.sun.com/blueprints/corej2eepatterns/Patterns/DataAccessObject.html[DAO(データアクセスオブジェクト)]です。 CRUD操作を非常に適切に指定できます。

その他のORMパターンまたは方法論については、Martin Fowlerの本をご覧ください:http://martinfowler.com/eaaCatalog/[*Patterns of Enterprise Application Architecture *]

また、既存のhttp://en.wikipedia.org/wiki/Java_Persistence_API[JPA(Java Persistence API)]を使用して、独自のJPAを作成することもできます。

4


リフレクション、動的プロキシ、cglib、asm、javassit-すべてはORMツールで使用されます。

しかし、あなたは本当に新しいものを作りたくありません。 _単純なORM_を作成できないためです。 ORMの作成は簡単ではなく、特定のポイントに到達すると実現します。 時間を無駄にしないでください。 既存のものを使用してください。 たくさんの、もっと複雑な、もっと簡単な(そしてそれほど強力ではない)ものがあります。

「シンプルなORM」をグーグルで検索すると、(多かれ少なかれ)簡単に_使用_できる選択肢がたくさんあります。 (ただし、実装しない)

2


さて、少し前まで、私はhttps://github.com/Riduidel/gaedo[gaedo]という名前のGAEのORMレイヤーを作成しました。 このフレームワークは、リレーショナルデータベースにも適合するモジュール式です。 うまくいけば、それはそのような仕事での私の3回目の試みでした。 したがって、必要なものとその理由を次に示します。

  • Reflection
    これは、すべてのORMマッピングツールのルートです。これにより、属性名と値を探しているクラスを探索できるようになります。 これは初めての使用です。 また、Beanに便利なコンストラクターがあれば、データストアから値をロードすることもできます(通常、ORMフレームワークはJava Beansに依存しています。これらのBeanは引数なしのコンストラクターが存在することを保証するためです)。 最後に、リフレクションを使用すると、データストアからBeanに値をロードできます。これが最も重要なことだと思います。 残念ながら、データベース全体をロードするクエリの問題にすぐに直面することになり、2つのイモリのステップが必要になります

  • グラフの読み込みを考慮すると、すぐに依存する必要があります

    [動的プロキシ]を使用して、遅延読み込み可能なオブジェクトを作成します。 明らかに、JDKのみに依存している場合は、よく知られたインターフェイスを実装するオブジェクトでのみ使用できます(例として、コレクションとマップは、インターフェイスを実装する動的プロキシの恩恵を受けるオブジェクトの非常に良い例です)。

  • 最後に、注釈はあまり使用されません。 彼らはあなたにできるようになります
    キー要素の定義(例として、オブジェクトのデータベースキーの生成に使用)、親子関係の定義、または前述の動的プロキシに関連するレイジーロード戦略の定義。

これは興味深いが、ほとんど役に立たない研究努力である。 興味深いのは、反射、プロキシ、および人々が無視し、いわゆる動的言語に留まると考える傾向のあるすべてのものに関する多くの概念を学習するためです。

しかし、コードをハッキングする必要があるコーナーケースが常に発生するため、役に立たない。

エマニュエルバーナードが「Les castcodeurs」(フランス語のJavaポッドキャスト)で語ったように、毎年、誰かが「http://www.theserverside.com/news/thread.tss?thread_id=58266[reimplementation]」を持っていると思うHibernateの。 そして毎年、この実装は、トランザクション、ローカルまたは分散、キャッシュ処理などのいくつかの重要なフラグメントが欠けていることを明らかにしています…​

したがって、コーディングしてみてください。インストールされているフレームワークとの重複が大きすぎるため、すぐに削除できることを忘れないでください。

1


JLibs-JDBCを試してください。

これは、リフレクションまたはXML構成を使用しない単純なORMです

1


あなたの質問の最後の部分に答えるために、はい;反射は深刻なパフォーマンスの打撃です。 代わりに通常コンパイラを使用するすべての作業は、代わりに実行時に行う必要があるため、リフレクションを控えめに使用します(たとえば、できれば起動時に一度だけ作成するようにキャッシュクラスをキャッシュします)。

Hibernateのコードには目を通していませんが、リフレクションを使用することを期待していますが、可能な限り最適化されています。

私の推奨事項は、最初に実用的な非常にシンプルなソリューションを作成し、その後、最適化を開始することです。

0


タイトルとURLをコピーしました