2012-02-20 15 views
0

私の考えは正しいですか?Java JDBCデータベースアクセス層

通常、Java Database Access Layerはどのように実装されていますか?私は

  • 削除(オブジェクトobj)(オブジェクトobj)
  • findOne(文字列型、文字列、文字列値)
  • のfindAll保存

    • (のような機能を持つクラスDBALを持って考えています文字列型、文字列型、文字列型)

    saveおよびdeleteは、たとえばドメインオブジェクトクラスを受け入れます。製品、ユーザー...それに応じてそれぞれの操作を実行

    findOnefindAllWHERE句に使用されるテーブル名、列値に対応typeを受け入れます。非常に単純ですが、アイデアが正しいかどうか疑問に思っていますか?

    私はDAOを持っている多くのサイトを参照しますが、ProductDAOUserDAOは非常によく似ていませんか?私はおそらく1クラスのDBALにそれらをマージすることができますか? ORM ORM背景から来

    シミュレーション

    ResultSet.getObjectはどうやって動作するのだろうかと疑問に思っていますが、ORMのようにUserテーブルをクエリして、私が返すことができるのはList<User>でしょうか?

  • 答えて

    4

    データベースアクセスレイヤーをJavaで実装する方法はたくさんありますが、他の言語でも同じパターンが適用されます。最も単純な形式は、テーブルデータゲートウェイです。このパターンには、データベーステーブルごとにゲートウェイインスタンスがあります。 DALのその他のパタ​​ーンはです。テーブル行ゲートウェイテーブル内のデータベース行ごとにゲートウェイインスタンスが存在します。 アクティブレコード。ドメインオブジェクトは、データベース自体と通信する方法を知っています。 Data Mapperここで、データはドメインオブジェクトとデータベースの間で移動され、互いとマッパー自体は独立しています。 これらのアプローチのそれぞれには、さまざまな賛否両論があります。私が言及したパターンを調べ、あなたのアプリケーションに最適なものを見てみましょう。

    ドメインオブジェクトタイプごとに明示的で明瞭な型セーフなインターフェイスを提供することが、基本DAO(TDG、TRG、あなたのもの)をサブクラス化する主な理由は、クライアントが適切なデータアクセス機能彼らはユースケースを実装するために必要です。同じコードがベースクラスで抽象化されています...

    アプリケーションの開始段階にある場合は、データアクセス(たとえば、Hibernateなど)を処理するためのツールを使用することをお勧めします。これらのツールは非常に一般的なもので、何百万もの問題がありますが、少なくともビジネスロジックを正しく理解し、アプリケーションドメイン外のこれらの問題を心配することに集中することができます。結局のところ問題が発生し、ソフトウェアが成功したように見える場合は、パフォーマンスを向上させるためにデータアクセスや、選択したツールが提供しているその他の頭痛に取り組むことができます。私はこれを言っているに過ぎません。なぜなら、自国の優れたデータアクセスソリューションを作るのはむしろ難しく、時間がかかるからです。並行性の問題、データベースIDからメモリインスタンス(s!)へのマッピングなどを考えてください。

    ResultSetに関する質問はありますか?いいえ。getObjectは、このResultSetオブジェクトの現在行にある指定された列の値をObjectとして取得します。したがって、あなたは自分自身でキャストを行う必要があります。また、このパスを下った場合、ドメインオブジェクトのFactoryをResultSetから取得することをお勧めします。

    これは大きな話題であり、すべてのパターンを詳細に取り入れることができない場合は申し訳ありません。私も自分自身で仕事をしています:-)あなたが "標準"ツールを使う代わりにあなた自身のものを作ることに決めたら、私がここで言及しているパターンのどれかを理解した後で、あなたのニーズに最適なスイート。

    よろしくお願いいたします。