我正在用ASP.NET MVC构建网络商店。
我有两个实体:分类和Product。
一个产品可以属于一个或多个类别。
在网页上,用户可以看到一个类别列表。通过单击“类别名称”,他可以看到该类别中的所有产品。用户还可以按名称、类别、价格等搜索产品。
控制器
我应该将哪些操作放入类别控制器,哪些操作应该放在产品控制器中?
存储库
我是否需要两个存储库(每个实体一个),如果需要,哪些方法属于哪个存储库:
IList<Category> GetCategories();
IList<Product> GetProducts(int categoryId);
Product GetProductById(int productId);
IList<Product> GetProducts(string name, decimal? minPrice, decimal? maxPrice);谢谢你的帮助!
发布于 2010-08-17 17:33:44
应用结构和设计在很大程度上是一个优先考虑的问题。有很多方法来做正确的事情,也有很多方法去做错的事情。我会把我要做的事写下来,你可以把它当作值多少钱.
我希望数据库中的每个对象或表都有一个简单的数据访问存储库。我通常让这些存储库实现一个简单的通用接口。然后,我构建了一个“服务”或“提供者”,它实现了每个简单的接口,并将“聚合”的所有功能放在一个地方。所谓“聚合”,我指的是一组共享类似功能的类和对象(如博客、商店、日志记录等)。我一直在寻找一种更好的方法来处理这个问题,但这是对我将为此使用的类和接口的粗略估计:
// interfaces
IRepository<T>
IProductRepository : IRepository<Product>
ICategoryRepository : IRepository<Category>
IShopService
// concrete implementations
LinqToSqlProductRepository : IProductRepository
LinqToSqlCategoryRepository : ICategoryRepository
ShopService : IShopService至于在您的控制器上设置哪些操作方法?我很少发现一个基本的RESTful方法不起作用的场景。对于添加、列表、显示、删除/销毁、编辑操作,没有什么是你不能做的。
// example ProductController
Add()
Add(ProductAddModel)
Delete(int id)
Edit(int id)
Edit(ProductEditModel)
List(int page)
Show(int id)编辑:
看了看后,我更改了以下签名:
IShopService : IProductRepository,ICategoryRepository
至:
IShopService
因为我使用的是IProductRepository和ICategoryRepository后面的通用接口,所以当您实现IShopService时,将有多个Add()、Delete()、FindAll()、FindByID()等方法;只有它们的参数不同。
更好的方法是只使用IShopService接口,并使用IProductRepository和ICategoryRepository实现该接口的具体实现。
发布于 2010-08-17 12:59:45
如果操作返回类别,则将其放入类别控制器中。如果它给你回产品,把它放在产品控制器。存储库也是如此。
这太简单了,但我认为在你的情况下是可行的。
https://stackoverflow.com/questions/3502463
复制相似问题