6

私はコントローラーを持っています。「注文コントローラー」。現在1800行です。サイズを小さくするのが好きです。私は問題のない静的ヘルパー メソッドを使用していますが、ninject を使用してリポジトリを呼び出しているため、プロパティを渡さずに静的メソッドのリポジトリにアクセスすることはできません。

コントローラーのノイズを減らすための良い方法は何ですか?

4

3 に答える 3

11

シンコントローラーの入手方法

  1. 複数のタイプの出力に適用できる、再利用可能な機能を にリファクタリングしますActionFilters結果:コードの繰り返しが減り、コントローラー アクションが薄くなり、将来の開発が迅速化されます。

  2. custom への特定のタイプの出力に適用される再利用可能な機能をリファクタリングしますActionResult結果:コードの繰り返しが減り、コントローラー アクションが薄くなり、将来の開発が迅速化されます。

  3. ModelBindersアクションに挿入される複雑なオブジェクトに入力値をバインドするために活用しますController結果:コントローラーで実際の HTTP 入力 (RouteData、フォーム値、クエリ文字列パラメーター) を処理する必要はまったくありません。モデル バインダーでデータ検証を処理することもできます。

  4. カスタムを介して依存性注入を実装しますControllerFactory結果: Controller でサービスを構築する必要はありません。

  5. 過剰な量のコントローラ アクションを含む単一のコントローラを複数のコントローラにリファクタリングします。 結果: コードの保守性が向上します。

  6. 静的ヘルパー メソッドを静的クラスに移動します。結果:メソッドは複数のコントローラーで再利用可能になり、コントローラー内の肥大化したコードが少なくなるため、アプリの保守と変更が容易になります。

その他の注意事項

これらのタスクを実行するのに役立つオープン ソース リソースが多数存在します。MvcContrib プロジェクトを調べることをお勧めします。それらには、FluentControllerシンコントローラーの構築を念頭に置いて設計された基本クラスがあります。また、Darin のおすすめの動画が役に立ったので、ぜひチェックしてみてください。

于 2011-03-04T12:35:19.517 に答える
1

コントローラーにそれほど多くのコードがあるべきではありません。懸念事項を分離していないのではないかと思います。

私はこのSOの質問に対する答えを見て考えます:

ASP.NET MVC パターン

要するに:

  1. 複雑さを、明確な目的を実行するサービス クラスに入れます。つまり、コントローラが必要とするものを提供します。

  2. コントローラーにはアプリケーション ロジックのみが必要です。つまり、一種の航空交通、うーん、コントローラーとして機能し、アプリ ロジックに基づいてリクエストをあちらこちらに送信する必要があります。一言で言えば、それはほとんどその機能です。他のものはコントローラーに属しません。

私のコントローラーは次のようになります。

[Authorize(Roles="Admin, Tutor, Pupil")]
public partial class CourseController : Controller
{
    ICourseDisplayService service;
    public CourseController(ICourseDisplayService service)
    {
        this.service = service;
    }

    public virtual ActionResult Browse(int CourseId, string PupilName, string TutorName)
    {
        service.Initialize(CourseId, 1, PupilName, TutorName, User);
        service.CurrentStepOrder = service.ActiveStepIndex;
        if (Request.IsAjaxRequest())
        {
            return PartialView(MVC.Courses.Course.Views._Display, service.ViewModel);
        }
        else
        {
            return View(MVC.Courses.Course.Views.Display, service.ViewModel);
        }
    }

コントローラーのコンストラクターでのサービスのインスタンス化と、アクションでのサービスの呼び出しに注意してください。

于 2011-03-04T12:36:05.127 に答える
0

1800行!!!!!!!!! 神の聖母。コントローラーのダイエットに関する次のビデオを見ることをお勧めします。

于 2011-03-04T11:56:30.717 に答える