つまり、CLRストアドプロシージャにほとんどのビジネスロジックを実装することは、優れた設計ソリューションですか?
私は最近それらについて多くを読みましたが、それらがいつ使用されるべきか、ベストプラクティスは何であるか、それらが十分に良いかどうかを理解することができません。
たとえば、私のビジネスアプリケーションは
- 大きな固定長のテキストファイルを解析し、
- ファイルの各行からいくつかの数字を抽出し、
- これらの数値によると、いくつかの複雑なビジネスルール(正規表現のマッチング、データベース内の多くのテーブルのデータに対するパターンマッチングなど)が適用されます。
- この計算の結果として、データベースのレコードが更新されます。
ユーザーがファイルを選択したり、結果を表示したりするためのGUIもあります。
このアプリケーションは、データレイヤー、ロジックレイヤー、GUIレイヤーという従来の3層アーキテクチャを実装するのに適しているようです。
- データレイヤーはデータベースにアクセスします
- ロジックレイヤーはWCFサービスとして実行され、データレイヤーと対話してビジネスルールを実装します。
- GUIレイヤーは、ロジックレイヤーとユーザー間の通信手段になります。
この設計を考えると、ほとんどのビジネスルールがSQL CLRに実装され、SQLServerに格納されていることがわかります。すべての生データをデータベースに保存し、そこで処理を実行して、結果を取得する場合があります。このソリューションにはいくつかの長所と短所があります。
長所:
- ビジネスロジックはデータの近くで実行されるため、ネットワークトラフィックが少なくなります。
- 並列処理と最適な実行プランを利用して、すべてのデータを一度に処理します。
短所:
- ビジネスロジックの分散:一部はここにあり、一部はそこにあります。
- 疑わしい設計ソリューションは、未知の問題に遭遇する可能性があります。
- 処理タスクの進行状況インジケーターを実装するのは困難です。
SQLCLRについてのご意見をお聞かせください。誰かがそれを本番環境で使用していますか?そのようなデザインに何か問題はありますか?いいことですか?