【发布时间】:2012-02-20 11:44:35
【问题描述】:
我有一个用 C# 和 Razor 编写的 ASP.NET MVC3。应用的架构分为数据访问层(EF类+Repository)、服务层、控制器、ViewModels和View。
从我的服务层 ProductServices 我调用我的存储库 ProductRepository 公开的方法 GetAllProducts ,它具有以下签名:
IQueryable<Products> GetAllProducts()
因此在ProductServices 内我调用(productRepository 是ProductRepository 的一个实例):
var products = productRepository.GetAllProducts();
填充变量products。现在我想从productServices 访问产品名称ProductName。如果我使用这条指令:
var productNames = products.Select(m => m.ProductName).ToList();
我正在创建 ServiceLayer 和 EF 之间的耦合(绕过存储库)。这意味着我必须向ProductRepository 添加一个带有签名的方法:
IQueryable<string> GetAllProductsName()
但是,由于我的应用程序中需要其他产品信息,我是否应该在productRepository 中为Product 类的每个字段创建一个方法?我的推理正确吗?谢谢
【问题讨论】:
-
如果它只是代理请求,你为什么需要服务层?
-
感谢您的回答。当然我的服务层也有所有的业务逻辑和几个方法,这就是我需要它的原因
-
是什么让你觉得这种耦合方式不好?
-
因为我已经提前知道,一年后数据库将被另一个数据库取代。这意味着字段的名称最有可能被更改,我也应该在我的存储库中更改它们,如果发生耦合,也应该在我的服务层中进行更改
标签: c# asp.net-mvc-3 repository service-layer coupling