服务层中的域逻辑 - 如何最好地引用它以及公开它

时间:2013-09-25 10:46:52

标签: wcf entity-framework service-layer business-logic-layer

我正在设计一个企业解决方案,其中包含产品系列中的模块化产品,首先使用Entity Framework代码定义域模型并提供数据访问。

e.g。解决方案:

ProductRange.Authentication
ProductRange.Gateway
ProductRange.OrderSystem
ProductRange.MarketingSystem

这些产品(解决方案)中的每一个都具有相似的层次,目前:

每个解决方案中的项目:

ProductRange.OrderSystem.Model (contains code first POCOs)
ProductRange.OrderSystem.DataContext (contains the dbContext)
ProductRange.OrderSystem.DataAccess (contains the Generic Repository)
ProductRange.OrderSystem.Service.DomainLogic (contains business logic)
ProductRange.OrderSystem.Service.ApplicationLogic (contains application logic)
ProductRange.OrderSystem.Presentation.AdminWebsite
ProductRange.OrderSystem.Presentation.CustomerWebsite

有些产品需要访问另一个产品的域逻辑,特别是他们都需要访问ProductRange.Authentication,而且ProductRange.MarketingSystem需要查询ProductRange.OrderSystem

我正在考虑通过WCF服务公开该范围内的产品之间的域逻辑。 但我还需要在本地引用该产品(例如创建项目引用)。

我该如何实施?我应该创建一个WCF服务,例如ProductRange.OrderSystem.WCF调用域逻辑并公开它或者我的域逻辑本身应该是WCF服务吗?如果是后者,我是否总是必须通过WCF引用我的域逻辑,即使是从本地ApplicationLogic?

我想我正在寻找有关哪些层以及如何最好地提供解决方案之间的互连的一些指导。

1 个答案:

答案 0 :(得分:0)

您可以使用单个(或多个)图层将您的pocos公开为datacontracts和服务合同。

例如:

ProductRange.Server.DataContracts
  Product
  AuthenticationInfo

ProductRange.Server.ServiceContracts
  IOrderService
  IAuthentication
   Auth(AuthenticationInfo info):AuthenticationResult

ProductRange.Server.Services
 OrderService
 AuthenticationService(implements IAuthentication interface)

在客户端,您可以参考此项目(仅限数据合同和服务合同),并通过以下接口创建透明代理:

var serviceProxy = SomeHelper.CreateServiceProxy<IAuthenticationService>();
var result = serviceProxy.Auth(new AuthenticationInfo());

此外:您可以将您的poco类用作数据合约。如果您想要更好的连接,那么您可以根据需要选择绑定(如net.tcp)。