首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >应用设计问题

应用设计问题
EN

Stack Overflow用户
提问于 2010-08-17 12:40:49
回答 2查看 107关注 0票数 2

我正在用ASP.NET MVC构建网络商店。

我有两个实体:分类Product

一个产品可以属于一个或多个类别。

在网页上,用户可以看到一个类别列表。通过单击“类别名称”,他可以看到该类别中的所有产品。用户还可以按名称、类别、价格等搜索产品。

控制器

我应该将哪些操作放入类别控制器,哪些操作应该放在产品控制器中?

存储库

我是否需要两个存储库(每个实体一个),如果需要,哪些方法属于哪个存储库:

代码语言:javascript
复制
IList<Category> GetCategories();
IList<Product> GetProducts(int categoryId);
Product GetProductById(int productId);
IList<Product> GetProducts(string name, decimal? minPrice, decimal? maxPrice);

谢谢你的帮助!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-08-17 17:33:44

应用结构和设计在很大程度上是一个优先考虑的问题。有很多方法来做正确的事情,也有很多方法去做错的事情。我会把我要做的事写下来,你可以把它当作值多少钱.

我希望数据库中的每个对象或表都有一个简单的数据访问存储库。我通常让这些存储库实现一个简单的通用接口。然后,我构建了一个“服务”或“提供者”,它实现了每个简单的接口,并将“聚合”的所有功能放在一个地方。所谓“聚合”,我指的是一组共享类似功能的类和对象(如博客、商店、日志记录等)。我一直在寻找一种更好的方法来处理这个问题,但这是对我将为此使用的类和接口的粗略估计:

代码语言:javascript
复制
// interfaces
IRepository<T>
IProductRepository : IRepository<Product>
ICategoryRepository : IRepository<Category>
IShopService

// concrete implementations
LinqToSqlProductRepository : IProductRepository
LinqToSqlCategoryRepository : ICategoryRepository
ShopService : IShopService

至于在您的控制器上设置哪些操作方法?我很少发现一个基本的RESTful方法不起作用的场景。对于添加、列表、显示、删除/销毁、编辑操作,没有什么是你不能做的。

代码语言:javascript
复制
// 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实现该接口的具体实现。

票数 1
EN

Stack Overflow用户

发布于 2010-08-17 12:59:45

如果操作返回类别,则将其放入类别控制器中。如果它给你回产品,把它放在产品控制器。存储库也是如此。

这太简单了,但我认为在你的情况下是可行的。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3502463

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档