1. ホーム
  2. asp.net-mvc

[解決済み] ASP.NET MVC - ビジネスロジックはコントローラの中にあるべきか?

2023-01-05 01:36:27

疑問点

Derik Whitaker が投稿した 記事 を投稿しました。この記事は、私が以前から気になっていた点を突いています。 ビジネスロジックはコントローラの中にあるべきでしょうか?

これまで私が見てきたすべてのASP.NET MVCのデモでは、リポジトリへのアクセスやビジネスロジックはコントローラに置かれていました。 いくつかは、検証もそこに投げ込みます。 その結果、かなり大きく、肥大化したコントローラーになっています。 これは本当にMVCフレームワークを使用する方法なのでしょうか? これは、多くの重複するコードとロジックを異なるコントローラに分散させることになるように思えます。

どのように解決するのでしょうか?

ビジネスロジックは本当にモデルの中にあるべきです。 太ったモデル、痩せたコントローラを目指すべきでしょう。

例えば、持つ代わりに

public interface IOrderService{
    int CalculateTotal(Order order);
}

むしろ欲しいくらいです。

public class Order{
    int CalculateTotal(ITaxService service){...}        
}

これは税金が外部サービスによって計算されることを想定しており、あなたのモデルが外部サービスへのインターフェースを知っていることを要求しています。

これはあなたのコントローラを次のようにします。

public class OrdersController{
    public OrdersController(ITaxService taxService, IOrdersRepository ordersRepository){...}

    public void Show(int id){
        ViewData["OrderTotal"] = ordersRepository.LoadOrder(id).CalculateTotal(taxService);
    }
}

みたいな感じで