次の疑問があります。Java アプリケーションから DB にクエリを実行する必要がある場合、いくつかの方法があります。私はいくつかのアプローチを考え出しましたが、それぞれに短所があります。
最初のものは、例えばクラスがあります。これは、接続などの管理の詳細を隠しながらQueryManager
、照会機能を提供します(一種のファサード パターン)。DB と対話する必要がある場合は、クエリを文字列として渡し、.executeUpdate(...)
executeQuery(...)
ResultSet
私が見ている問題は、DB が変更された場合、DBMS であれ DB 自体であれ、ファイルごとに SQL を変更することになります。これは大きな依存関係だと思います。また、DB の構造をすべての人に公開し、各クラスでResultSet
. 一方、クラスのモデル (私はMVC Patternのファンです) がパッケージの可視性を持つ可能性があるため、この方法を使用してより高いモジュール性を実現できます。
私の頭に浮かんだ 2 番目のアイデアはQueryManager
、クエリのメソッドを提供する代わりに、必要なメソッドを提供するクラスを作成することでした。つまり、DB を使用する必要があるたびに、必要な情報を返す SQL を含むメソッドをこのクラスに作成します。ResultSet
しかし、ここで直面している問題は、必要なデータを返すかモデルを返すかを選択する必要があることです。
前者は、すべての SQL が 1 つのクラス/ファイルに含まれているため、DBMS との依存関係が広範に広がっていないため、前の例よりもクラスの DB への依存度が低くなります。ただし、DB 構造との依存関係は依然として存在し、DB 構造もすべての人に公開しています。
後者は、これらのモデルがもはやパッケージの可視性ではないことを意味します。それらはパブリックでなければならず、任意のクラスがそれらを変更できるようにし、カプセル化を解除します。
以前の問題をすべて解決する他のアプローチはありますか? そうでない場合、どちらがより良いアプローチだと思いますか?
絶対的な答えがあるとは思いませんが (あるかもしれません)、DB の構造と DBMS の両方に変更が加えられることを期待していると言わざるを得ません。これはあなたの答えに役立つかもしれません。しかし、私は同じ疑問を持って他のプロジェクトにいる可能性があるため、できるだけ一般的にするようにしてください。ただし、同じ制限はありません。