2011-12-06 188 views
2

我使用ASP.net MVC3作为我的表示层,我的数据访问和业务逻辑通过WCF服务公开。我的控制器应该调用WCF服务,还是应该有更高层次的抽象,如调用WCF服务的存储库。MVC控制器WCF服务

库直接调用服务

public ProductController(IProductRepository productRepository) 
{ 
     _productRepository = productRepository; 
} 

public ProductRepository(ProductServiceClient client) 
{ 
     _client = client; 
} 

服务中的控制器

public ProductController(ProductServiceClient client) 
{ 
     _client = client; 
} 

的仓库类无能为力除了呼叫通过服务公开的方法。

+0

我的做法是,只有当它做一些事情引入额外的层。如果你认为你的客户端逻辑是直接的,那么只需从控制器调用服务并完成它。如果你想在你的客户端引入一个业务层,那么只需要实现“服务层”来编排wcf调用和必要的业务逻辑。 – Roman

回答

1

对不起,我很困惑你的问题,但如果我误解了,我很抱歉。希望我的指针能够解决这个问题。

  1. 持久化和定义的方式来处理 基础设施层即数据处理(在内存中存储库, SQL资料库或一般之一)
  2. 服务相关的资料库,如果你喜欢使用这些存储库执行 合约操作,如让客户参与您的案件。
  3. 服务由客户或请求服务的人调用,并且服务依次调用存储库,该库又调用数据 操作。

所以,你可能需要改变你的WCF与仓库工作,并让你的控制器通话services..hope,帮助

+0

对不起,我认为我的课程命名错误。 \t 我的架构:特定于演示的MVC和业务规则 - WCF服务API - 业务逻辑 - 数据访问(存储库模式) – ministrymason

+0

特定于演示文稿的业务规则可以在视图模型类型范例中处理。实际上有些人认为它是一种更好的方式,因为模型完全定义了一个实体,在这种情况下,您的业务逻辑(通过视图模型绑定到您的视图)并且还允许验证。 – user182630

0

我首先要做的确切反例 - WCF应该调用存储库中的方法。

数据层应该是通用的,应该可以通过任何方式访问(wcf应该是一个,mvc网站应该是另一个,等等)。

这样你也可以单元测试你的项目,并且跟踪它更容易。在这种情况下,Wcf应该被视为您的程序的额外API。

我更关心应该在哪里存储业务规则,但是我会投票给mvc控制器来处理业务逻辑,而wcf服务会在内部调用这些控制器。

+0

我的架构:特定于演示的MVC和业务规则 - WCF服务API - 业务逻辑 - 数据访问 - 存储库 – ministrymason

+0

您也可以看到:http://stackoverflow.com/questions/1657835/asp-net-mvc-wf-wcf - 服务层 - 如何使用 - 这就是所有功能于一身的项目,但多数民众赞成我的建议! –

+0

你能举一个你会使用的架构的例子吗? – ministrymason