我明白MVC是把事情放在正确的地方,逻辑应该在哪里。我的控制器操作正在被业务逻辑(与数据存储无关)充满,我觉得我应该开始将一些逻辑移到另一个地方。
有没有一个惯例,我应该放置这个逻辑?例如,我有以下控制器位于控制器文件中:
adminPowerController public ActionResult Create(string test1) // business logic // business logic // business logic return View(); } public ActionResult Index(string test1) // business logic // business logic // business logic return View(); }
解决方法
将业务逻辑推荐的地方放在服务层中。所以你可以定义一个代表业务操作的界面:
public interface IMyService { DomainModel SomeOperation(string input); }
然后实施这项服务。最后控制器会使用它:
public class MyController: Controller { private readonly IMyService _service; public class MyController(IMyService service) { _service = service; } public ActionResult Create(string input) { var model = _service.SomeOperation(input); var viewmodel = Mapper.Map<DomainModel,viewmodel>(model); return View(viewmodel); } }
并配置您的DI框架以将服务的正确实现传递到控制器中。
备注:在我提供的例子中,我使用AutoMapper将域模型转换为传递给视图的视图模型。