asp.net-mvc – 洋葱建筑 – 存储库与服务?
|
我正在从杰弗里·巴勒莫学习着名的洋葱建筑。
在许多例子中,存储库似乎具有像GetAllProductsByCategoryId或GetAllXXXBySomeCriteriaYYY这样的业务逻辑。 对于列表,似乎服务只是存储库中的包装器,没有任何逻辑。 解决方法存储库不是访问数据库的网关。这是一种抽象,允许您从某种形式的持久性存储中存储和加载域对象。 (数据库,缓存或甚至纯粹的集合)。它采取或返回域对象而不是其内部字段,因此它是面向对象的接口。不建议将诸如GetAllProductsByCategoryId或GetProductByName之类的方法添加到存储库中,因为随着用例/对象字段计数的增加,您将添加越来越多的存储库方法。相反,最好在存储库中具有一个“规范”的查询方法。您可以通过规范的不同实现来检索产品。 总的来说,存储库模式的目标是创建一个存储抽象,当用例更改时不需要更改。 This article详细介绍了域建模中的Repository模式。你可能有兴趣 对于第二个问题:如果我在代码中看到一个ProductRepository,我希望它返回一个Product列表。我也期望每个Product实例都是完整的。例如,如果Product有对ProductDetail对象的引用,那么我希望Product.getDetail()返回一个ProductDetail实例而不是null。可能实施的库将ProductDetail与Product一起加载,也许getDetail()方法即时调用ProductDetailRepository。我并不关心作为存储库的用户。当我调用getDetail()时,产品也可能只返回ProductDetail id。从仓库合同的角度来看,这是完美的。然而,我的客户端代码复杂化,迫使我自己调用ProductDetailRepository。 顺便说一句,我看到过许多服务类,只包含过去的存储库类。我认为这是一种反模式。最好让服务的呼叫者直接使用存储库。 (编辑:安卓应用网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- asp.net-mvc – 如何将用户重定向到ASP.NET MVC中的自定义4
- .net – TagBuilder从MVC 3 beta版转到RC
- asp.net-mvc – 如何从MVC 3中的View中将List或Collection返
- ASP.NET Web API:OAuth服务提供商
- ASP.NET会话状态和多个工作进程
- asp.net-mvc – 什么是AsyncManager.OutstandingOperations
- asp.net – 有什么功能,将帮助我重构CSS
- asp.net – 我可以在SQL会话状态配置中重用现有连接字符串吗
- asp.net – 如何找到哪个控制器/操作发生错误?
- asp.net-mvc-3 – ActionButton而不是ActionLink
