ある組織では、Webアプリケーションで働いていたすべてのビジネスロジックをデータベースストアドプロシージャに基づいて開発しています。たとえば、ビューとしてhtmlを使用し、コントローラーとしてサーブレットを使用して、クライアント要求を適切なデータベースストアドプロシージャに転送します。
この種の設計の長所と短所は何ですか?私の意見では、ビジネスロジックがデータベースに大きく依存している場合は、この種の設計に従うほうがいいです!!!!!!
理論的には、長所と短所は次のとおりです。
長所:
短所:
現在、実際には、愚か者だけがデータベースにすべてのビジネスロジックを持っています。
だから、客観的に質問に答える。ほとんどの場合、ストアドプロシージャは一部の場合にのみ必要です。たとえば、いくつかの大きなテーブルで多くの条件付き処理を実行する必要がある場所を生成するレポートがある場合、アプリケーションがデータベースに対して数百のSQLクエリを実行することは望ましくありません。ストアドプロシージャを作成して、ネットワークラグのオーバーヘッドが発生しないようにする必要があります。また、通常は、クライアントがデータベース全体でカスタムっぽいクエリを実行したい場合にのみ、ストアドプロシージャを作成します。ストアドプロシージャとビューを使用すると、クライアントがデータベースに精通していなくても、これを簡単に実現できます。
短所:
Webアプリケーションのストアドプロシージャに関するすべてのビジネスロジックを保持する長所:
Webアプリケーションのストアドプロシージャのすべてのビジネスロジックを保持する短所:反対:
私が通常遭遇する2つの大きな短所があります。
それはすべてあなたのteam's experience
そしてあなたの project's requirements
。 DBAをチームに招き、要件を満たすために何をすべきかを決定します。ただし、多層アプリケーション設計では、ビジネスロジックをストアドプロシージャにカプセル化することは適切な決定ではない場合があります。
ビジネスロジック:
business logic in programming space makes more sense
いつ Power of Expression
はチーム/プロジェクトで重要です。
SQLスペースはそれほど表現力がないと思いますが、it can do the job
。最も適切なタスクのために手元にある最高のツールを使用します。ロジックと高次の概念をいじるのは、highest level.
結果として、おそらくストレージおよび大量のデータ操作はサーバーレベルで行うのが最適です、おそらくストアドプロシージャで行います。
現代では、これはもはや一般的なアプローチではありません。ストアドプロシージャにビジネスロジックを配置することは、Webプログラミングの早い段階で一般的に行われることでした。今日私はそれに反対することをお勧めします。
ストアドプロシージャのビジネスロジックについては、長所と短所を比較検討した結果、どういうわけか他のアプローチを打ち負かした選択肢として正当化できるものはないと私は言わなければなりません。 PROポイントは、せいぜい学術的なものです。
CONのlinqコードではありません。 TSQLの未来はlinqにコンパイルされています。
コンパイルされたコードはより安定しており、扱いやすくなっています。何かをデバッグしている場合、C#やJavaを使用すると、非常に多くの情報を入手できます。
ストアドプロシージャは多くの責任を負うことになる可能性が高いため、責任を1に維持することを試みることをお勧めします。
責任の分離の欠如は、コアクラスがますます大きくなるため、作業がますます難しくなり、安定性が低下するアプリケーションにつながります。
Microsoft Asp.Net MVCをEntity Framework Code Firstと組み合わせると、アプリケーションを迅速に構築でき、ストアドプロシージャは不要になります。