如何在不同型号的控制器之间共享代码?如何在不同型号的控制器之间共享代码?
在'超级'控制器操作中,我希望能够找出哪个控制器(路由)被调用,并使用该路由名称加载相应的模型,并使用该模型来查询数据库以传递给视图。
我可以很容易地在Ruby on Rails中做到这一点,MVC允许这样的事情吗?
如何在不同型号的控制器之间共享代码?如何在不同型号的控制器之间共享代码?
在'超级'控制器操作中,我希望能够找出哪个控制器(路由)被调用,并使用该路由名称加载相应的模型,并使用该模型来查询数据库以传递给视图。
我可以很容易地在Ruby on Rails中做到这一点,MVC允许这样的事情吗?
当然,你可以让所有的路由指向一个中央控制器,如果你愿意,然后重定向。或者,你可以有一个基地控制器,其他控制器也从此继承。
难道你不能使用所有控制器的基类,并添加逻辑确实找出基类中的路由吗?
或者将“规则发现方法”提取到一个辅助类并在每种方法中使用它。
你可以使用泛型:你的模型
public abstract class GenericRepositoryController<TModel> : Controller
{
private readonly IRepository<TModel> _repository;
protected GenericRepositoryController(IRepository<TModel> repository)
{
_repository = repository;
}
public ActionResult Index()
{
var model = _repository.GetAll();
return View(model);
}
}
public class EmployeeController : GenericRepositoryController<Employee>
{
public EmployeeController(IRepository<Employee> repository) : base(repository)
{
}
}
public class CustomerController : GenericRepositoryController<Customer>
{
public CustomerController(IRepository<Customer> repository) : base(repository)
{
}
}
觉得作为数据结构,简单的类。他们当然应该有属性,但通常不是代码。代码应该在其他地方组织,以便共享。
如何取决于你想分享的代码的性质。如果它是控制器级别的逻辑,例如与模型或视图操作相关,那么在控制器基类中它可能是最好的。如果它是业务逻辑,它应该在服务中。将服务视为控制器与存储库或数据库之间的业务逻辑层(取决于您是否使用IOC)。您的服务应该包含在您的网站引用的库项目中,以便任何控制器都可以引用它们。
您的路由规则应根据命名约定将您置于适当的控制器中,并调用操作方法。这些方法可能会调用来自其他类或引用项目的任何代码。