Sam*_*Sam 2 service repository-pattern asp.net-mvc-2
或者我根本不明白这一点.
我使用Controller - > ViewModel - > Service - > Repository模式启动了我的ASP.NET MVC应用程序.
每种类型的对象(客户,产品,类别,发票等)是否需要拥有自己的存储库和服务?如果是这样,你如何将常见物品放在一起?
我的意思是很多时候,其中一些东西会显示在同一页面上.所以我没有得到这个,我不认为.
所以我想我需要一个ShopController,它有一个ShopViewModel,可以有类别,子类,产品等等.但对我来说,问题是它似乎没有很好地融合.
也许ASP.NET WebForms适合像我这样的人:)
编辑
所以汇总包括:
Product,SubCategory,Product,ChildProduct,ProductReview,Product是聚合根?
然后在ViewModels中,您将访问产品以获取其子产品,评论等.
我正在使用实体框架4,那么如何使用存储库/服务模式实现延迟加载?
每种类型的对象(客户,产品,类别,发票等)是否需要拥有自己的存储库
您的域中每个聚合根应该有一个存储库.有关什么是聚合根的更多信息,请参阅此问题.
在您提供的示例中,我可以看到CustomerReposiotry将处理检索所有相关客户数据(客户订单下订单有客户).处理检索产品信息的ProductRepository.
和服务?如果是这样,你如何将常见物品放在一起?
服务层很好,但只有在添加此层时有附加值.如果您的服务只是直接进入存储库,则可能不需要它.但是,如果您需要在Product上执行某些业务逻辑,则ProductService可能有意义.
这可能没有意义
public void UpdateProduct(Product product)
{
_repo.Update(product);
}
Run Code Online (Sandbox Code Playgroud)
但是如果你有逻辑,那么这个层就可以封装你的产品业务规则.
public void UpdateProduct(Product productToUpdate)
{
//Perform some sort of business on the productToUpdate, raise domain events, ....
_repo.Update(productToUpdate);
}
Run Code Online (Sandbox Code Playgroud)
所以我想我需要一个ShopController,它有一个ShopViewModel,可以有类别,子类,产品等等.但对我来说,问题是它似乎没有很好地融合.
如果域被刷新,则视图模型最终会有意义
public ActionResult Index()
{
ShopViewModel shopViewModel = new ShopViewModel();
shopViewModel.Products = _productRepo.GetAll();
//other stuff on the view model.
return(shopViewModel);
}
Run Code Online (Sandbox Code Playgroud)
更新
当您还需要提供从聚合根无法获得的数据时会发生什么?例如,假设我有一个创建客户视图,并且在该视图中,我还需要向用户提供可供选择的公司集合以将新客户与之关联.公司集合是来自CustomerRepository还是您还需要CompanyRepository?
如果公司可以独立生活(例如,您编辑,更新,删除公司),我建议公司也是您域名的集合根(客户有公司,公司有客户列表).但是,如果公司只能通过客户获得,我会将公司视为ValueType/Value Object.如果是这种情况,我会在客户存储库上创建一个方法来检索所有CompanyNames.
_repo.GetAllCompanyNames();
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
173 次 |
| 最近记录: |