これは絶対にボンカーですか.....
私は新しいプロジェクトに取り組み始めたばかりで、今見たものにショックを受けています. このプロジェクトは、Oracle データベースの上にある C# Web アプリです。現在、すべてのストアド プロシージャは、実際にはストアド プロシージャではありません..それらは、サーバー上のディレクトリ内のテキスト ファイルに格納されている単なる SQL スクリプトです。アプリケーションが起動すると、ディレクトリを調べて各ファイルを調べ、テキストを読み込んで辞書に保存します。また、[PARAM] などの特殊なシーケンスを削除するテキストに対して Regex を実行し、それらを正しい記号 (Oracle の場合は「:」、SQL SERVER の場合は「@」) に置き換えます。次に、コードがこれらのステートメントのいずれかを実行する必要がある場合、辞書で正しいステートメントを見つけて実行するメソッドを呼び出します。
現在、これは、基盤となる db テクノロジを交換したい場合に備えて行われたようです。彼らは、適切な構文のファイルのディレクトリからSQLファイルを交換するだけでうまくいくと言います。
今、私は通常、ストアド プロシージャが実際にはストアド プロシージャであり、データベース上に存在することを期待しています。データベースと通信する別のプロジェクト (レイヤー)。次に、db テクノロジが変更された場合は、別のデータ層プロジェクトを追加して、dll を交換するだけです....
現在行われている方法には大きな問題があります。
- 作成中の db サーバーに実行計画がありません。
- 何百ものテキスト ファイルを読み取り、それぞれの文字列を作成し、その上で正規表現を実行するという、膨大なオーバーヘッド。
- SQL 構文のチェックなし。
- これらすべてのストアド プロシージャがメモリ内にある大きなメモリ フット プリント
どう思いますか?
これは本当に悪いことなのか、それとも今まで見たことがないからうめいているだけなのか?
このアプローチには他に何が問題がありますか?
これはクレイジーだと同僚に伝えようとしているので、どんなコメントでも大歓迎です....