我决定将 ASP.NET MVC 用于网站项目,并希望遵循一些最佳实践。
因此,我已将域/模型分离为一个单独的项目,创建了IRepositories和具体的存储库,现在我将注意力转移到 Castle Windsor 作为 IoC 。
我现在面临的问题是,对于特定的Controller,在构造函数上,我现在必须传入多个IRepository参数。
我的问题是:
给出某种背景。该网站的一部分将显示可通过属性类型(城堡,住宅,酒吧等),位置(邮政编码,城市),搜索的属性的谷歌地图开放时间等 因此,这些可搜索的组件都是独立的实体PropertyType,Address.City,Address.Postcode.Lat + Long,OpeningTime.DateTime。因此,还有3个单独的存储库必须传递给SearchController构造函数。
这是一个简单的例子,但我可以设想将来会有更多的存储库参数传递给其他控制器。
希望这一切都有意义。
感谢您提供任何答案或建议。
答案 0 :(得分:3)
我不关心你传递给构造函数的参数有多少,IoC将处理所有逻辑。
如果您的控制器最终有太多参数,我会考虑分解控制器的功能,或者将逻辑移到服务类中。
对于存储库,我通常使用通用存储库,它将在其实现中使用单个实体。然后我有一个服务类,将该信息聚合成逻辑单元。在这种情况下,您的控制器只需要访问该服务。例如:
interface IRepository<T>
{
IQueryable<T> GetAll();
T GetOne(int id);
void Save(T item);
void Delete(T item);
}
class OrderService
{
public OrderService(IReopository<Order> orderRepository, IRepository<OrderDetail> orderDetailRepository, IRepository<Payment> paymentRepository, etc) { }
public Order CreateOrder(List<OrderDetails> details)
{}
// .. other aggregate methods
}