ビジネスロジックは実際にモデルに含まれている必要があります。あなたは太ったモデル、細いコントローラーを目指しているべきです。
たとえば、次の代わりに:
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);
}
}
またはそのようなもの。