最近私が参加した私の会社では、ASP.netソリューションを使用して、クライアントにhttpベースのRESTful APIを提供しています。ストアドプロシージャベースのソリューションをOOPに移行しますか?
実際には、この「APIレイヤー」レイヤーは非常に「薄い」もので、パラメータの変換+深いレイヤーの呼び出しという2行のコードしか含まれていない多くのメソッドがあります。
したがって、「APIレイヤー」は、http呼び出しを介して取得されたパラメーターを次のレイヤーに渡します。プロパティーは、プロパティーを主に持つクラス(主にロジックなし)である「ビジネスオブジェクト」に変換されます。この「ビジネスレイヤー」はプロパティをもう一度「リポジトリレイヤー」に渡し、別のクラス(「パラメータクラス」)のプロパティを満たし、最終的にこれらのパラメータでストアドプロシージャを呼び出します。
ほとんどすべての "ビジネスロジック"はストアドプロシージャでは "非表示"になっています。
呼び出されると、out-parametersがC#リポジトリのレイヤクラスに渡され、すべてのバックが「APIレイヤー」に変換されます。
要するに、C#クラスは実際にはロジックやOOPを使用しません。実際には、ストアド・プロシージャのパラメータから自動的に作成される可能性が最も高いのは、APIパラメータを収集し、データベース(Oracle)に渡してストアド・プロシージャに渡し、ストアド・プロシージャ・コールの結果をAPI。
前述の「アーキテクチャ」からわかるように、現時点では単体テストと統合テストは存在しません。
説明されたアーキテクチャはかなり古く、私は80年代にはデータベース内のすべてのBLを作成する意味があると思います。
私はTDDに慣れていたので、テスト容易性のために設計されていないため、既存のコードベースの単体テストを作成し始めました。残念なことに、「正しい」ストアドプロシージャが「正しい」パラメータで呼び出されていることから、それほどテストすることもあまりありませんでした。
将来的には、ストアドプロシージャを使用してデータベースにアクセスすることが唯一の方法である必要があるため、ある種のO/Rマッパーに移動することができない可能性があります。
この「アーキテクチャ」についてどう思いますか?
これは(有用な)コードと似ていないので、これまでの私のキャリアで見てきました。私はOOPのメカニズム、SOLIDコード、パターンを使用して、C#クラスにビジネスロジックを書いて、TDDに使用されています(前バージョン1.0以降のプログラミングのC#、C++)
...
データベースは、通常は「持続ましたO/Rマッパーを使用してアクセスされた「レイヤー」のみです。
どこから始めたらよいかわかりません。この80年代の "アーキテクチャ"をよりOOPスタイルに変換するにはどうしたらいいですか?
私は現代的なOOPプログラミングスタイルを適用して、メンテナンス可能な自動テスト可能かつ適応可能なソリューションを作成し、ストアプロシージャにロジックを入れ続け、C#をラッパーとしてこれらのプロシージャを呼び出すのではなく、
Entity Frameworkを使用して基本的なCRUDとクエリ操作を行うストアドプロシージャを呼び出すプロトタイプを作成できますか?
「この書き換えはビジネスにどのようなメリットをもたらしますか?他のアプリケーションを書き換える必要がないことを保証できますか?取るつもり?"経営陣の好きな質問:「これはどれくらいの費用がかかりますか?」ビジネス上のメリットや目標は何もなく、作業コードベースを大幅に書き直すのではなく、ビジネスに必要な機能を実装するほうがよいでしょう。 –
質問には意見が多少あるかもしれませんが、トピックをかなりうまくカバーする同様のスレッドがあります:[データベースがどの程度ビジネスロジックを実装する必要がありますか?](http://softwareengineering.stackexchange.com/questions/194446/howデータベースの実装が必要な多くのビジネスロジック) –
また、[このスレッド](http://softwareengineering.stackexchange.com/questions/170808/do-stored-procedures-violate-three-tier-separation )(前の記事で述べた)は同じ話題を扱っています。 –