JDBC準拠のアプリケーションは、SQLステートメントをどこに保存する必要がありますか。その理由は何ですか。
これまでのところ、これらのオプションを特定することができました。
- ビジネスオブジェクトにハードコーディング
- SQLJ句に埋め込まれる
- データアクセスオブジェクトなどの個別のクラスにカプセル化する
- メタデータ駆動型(オブジェクトスキーマをデータスキーマから分離-メタデータでのそれらの間のマッピングを記述)
- 外部ファイル(プロパティやリソースファイルなど)
- ストアドプロシージャ
それぞれの「長所」と「短所」は何ですか?
SQLコードは「コード」または「メタデータ」と見なす必要がありますか?
ストアドプロシージャは、パフォーマンスの最適化のみに使用すべきですか、それともデータベース構造の正当な抽象化ですか?
決定はパフォーマンスが重要な要素ですか?ベンダーロックインについてはどうですか?
何がより良い–疎結合または密結合とその理由?
編集:回答ありがとうございます–要約は次のとおりです:
メタデータ駆動型、つまりオブジェクトリレーショナルマッピング(ORM)
長所:
- 非常に抽象的-モデルを変更せずにDBサーバーを切り替えることができます
- 広範囲-実際には標準
- 必要なSQLの量を削減
- SQLをリソースファイルに格納できます
- パフォーマンスは(通常)許容範囲です
- メタデータ主導のアプローチ
- (データベース)ベンダー非依存
短所:
- SQLと真の開発者の意図を隠す
- SQLはDBAによるレビュー/変更が困難
- SQLはまだ奇妙なケースで必要になるかもしれません
- HQLなどの独自のクエリ言語を強制的に使用できます
- 最適化に向いていない(抽象化)
- 参照整合性に欠ける
- SQLの知識不足またはDBでのコーディングの注意不足の代替
- ネイティブデータベースのパフォーマンスに決して一致しない(たとえ近づいても)
- モデルコードはデータベースモデルと非常に緊密に結合されています
DAOレイヤーにハードコード/カプセル化
長所:
- SQLはデータにアクセスするオブジェクトに保持されます(カプセル化)
- SQLは書きやすい(開発速度)
- SQLは、変更が必要なときに簡単に追跡できます
- シンプルなソリューション(乱雑なアーキテクチャなし)
短所:
- SQLはDBAがレビュー/変更することはできません
- SQLはDB固有になる可能性が高い
- SQLは保守が困難になる可能性があります
ストアドプロシージャ
長所:
- データベースに保持されているSQL(データに近い)
- SQLは、DBMSによって解析、コンパイル、および最適化されます。
- SQLはDBAが簡単に確認/変更できます
- ネットワークトラフィックを削減
- セキュリティの向上
短所:
- SQLはデータベースに関連付けられています(ベンダーロックイン)
- SQLコードの保守が難しい
外部ファイル(プロパティやリソースファイルなど)
長所
- SQLは、アプリケーションを再構築する必要なく変更できます
- SQLロジックをアプリケーションビジネスロジックから分離
- すべてのSQLステートメントの中央リポジトリ–保守が容易
- 理解しやすい
短所:
- SQLコードが保守不能になる可能性がある
- SQLコードで(構文)エラーをチェックするのが難しい
SQLJ句に埋め込まれる
長所:
- 構文チェックの改善
短所:
- Javaに近すぎる
- JDBCよりもパフォーマンスが低い
- 動的クエリの欠如
- あまり人気がない