私はストアドプロシージャのファンではありません
ストアド プロシージャは、次の理由により保守性が高くなります。 * SQL を変更するたびに C# アプリを再コンパイルする必要はありません。
とにかく、データ型が変更されたとき、または余分な列を返したいときなどに再コンパイルすることになります。アプリの下から SQL を「透過的に」変更できる回数は、全体としてかなり少ない
C# を含むプログラミング言語には、関数と呼ばれるこの驚くべき機能があります。つまり、同じコード ブロックを複数の場所から呼び出すことができます。すばらしい!その後、再利用可能な SQL コードをこれらのいずれかに入れることができます。または、本当にハイテクを取得したい場合は、それを行うライブラリを使用できます。それらは Object Relational Mappers と呼ばれ、最近ではかなり一般的になっていると思います。
保守可能なアプリケーションを構築しようとしているときに、コードの繰り返しは最悪の行為です。
これが、ストアドプロシージャが悪いことである理由です。コードを関数にリファクタリングして分解 (より小さな部分に分割) する方が、SQL を... SQL のブロックにするよりもはるかに簡単ですか?
4 つの Web サーバーと、同じ SQL コードを使用する多数の Windows アプリがあります。SQl コードに小さな問題があることに気付きました。それでは、1 か所で proc を変更するか、コードをすべてにプッシュします。 Web サーバー、すべての Windows ボックスにすべてのデスクトップ アプリを再インストールします (clickonce が役立つ場合があります)。
Windows アプリが中央データベースに直接接続しているのはなぜですか? これは巨大なセキュリティ ホールのようであり、サーバー側のキャッシュを排除するためのボトルネックです。Web サービスなどを介して Web サーバーに接続するべきではありませんか?
では、1 つの新しい sproc をプッシュしますか、それとも 4 つの新しい Web サーバーをプッシュしますか?
この場合、1 つの新しい sproc をプッシュする方が簡単ですが、私の経験では、「プッシュされた変更」の 95% はコードに影響し、データベースには影響しません。その月に Web サーバーに 20 個をプッシュし、データベースに 1 個をプッシュする場合、代わりに 21 個を Web サーバーにプッシュし、データベースにゼロをプッシュしても、ほとんど損失はありません。
より簡単にコードをレビューできます。
方法を説明できますか?わかりません。特に、sprocs はおそらくソース管理されていないため、Web ベースの SCM ブラウザーなどからアクセスすることはできません。
その他の短所:
Storedproc はデータベース内に存在し、外部からはブラック ボックスのように見えます。それらをソース管理に入れたいというような単純なことは悪夢になります。
純粋な努力の問題もあります。いくつかのフォーラムを構築するのに 700 万ドルかかる理由を CEO に正当化しようとしている場合は、すべてを100 万層に分割することは理にかなっているかもしれませんが、それ以外の場合は、すべての小さなものに対して storeproc を作成することは、無駄な追加作業にすぎません。利点。