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