私は現在、パターンの経験が限られているにもかかわらず、C#MVCアプリケーションをリファクタリングしようとしています。被験者の周りを読んで、私はベストプラクティスのために逆らって反対意見を絶えず抱えているようです。MVC:ビジネスロジックがどこに属しているかについて明確な答えがありますか?
私の最大の問題は、コントローラーに多すぎるものがあることです。それらは機能しますが、再構成やテストが困難なビジネスロジックでいっぱいです。モデルはほとんどが薄いDTOです。では、この有用なビジネスロジックを再構築してテストするために、どこから始めましょうか?
多くの人はそれがgo in the modelであると言います。しかし、あなたはそれを言っている人がいます。。そして、モデルcontaining data and NOTHING ELSEの原理がパターンの基本であることを伝える他の人たち。
次に、4番目のタイプのクラス「ViewModel」に入るべきだと言う人がいます。今私はWPFでMVVMに取り組んできましたが、私はこのパラダイムに精通しています。しかし、それをMVCに追加するだけで、パターンの指示に盲目的に従うよりも、他の場所で行われる多くの作業を複製するように見えます。
さらに別のオプションは、何らかのヘルパークラスに入れることです。これは一般的な提案ですが、私はリンクしません。しかし、それを行うことは、単一のコントローラに機能を提供する以外に存在することのない別のクラスを無駄に使用するように思えます。そして、それはOOP原則の根本的な違反に見えるでしょう。
これには「正しい」答えがありますか?もしそうなら、そんなに混乱するのはなぜですか?もしそうでなければ、あなたはこの意見で最善の解決策をどのように評価するのでしょうか?
あなたは最も重要なものを逃したようです:*サービス*。これは、[SOLID](https://en.wikipedia.org/wiki/SOLID_(object-oriented_design))のすべてです。ビジネスロジックを単一責任サービスに抽象化して、簡単にテストすることができます)お互いとコントローラ。 [Dependency Injection in .NET](https://www.manning.com/books/dependency-injection-in-dot-net)と[この記事](http://misko.hevery.com/ 2008/09/30/to-new-or-not-to-new /)を使用して、複雑なアプリケーションのコンテキストでどのように適合するかを理解してください。 – NightOwl888
CQRSパターンをチェックしましたか?基本的にあなたのコントローラはダムになることもあります。これらのコマンドの実行方法を知っているハンドラにコマンドを渡し、クエリに対しても同様のコマンドを渡します。 – Bishoy