3

도메인 모델을 정의하고 데이터 액세스를 제공하기 위해 먼저 Entity Framework 코드를 사용하여 제품 범위 내에서 모듈화 된 제품으로 구성된 엔터프라이즈 솔루션을 설계하고 있습니다.서비스 계층의 도메인 논리 -이를 참조하고 노출하는 최선의 방법

솔루션 :

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를 쿼리해야합니다. 주문 시스템

WCF 서비스를 통해 범위 내의 제품간에 도메인 논리를 노출하려고합니다. 하지만 로컬로 제품을 참조해야합니다 (예 : 프로젝트 참조 만들기).

어떻게 구현해야합니까? 예 : WCF 서비스를 생성해야합니까? ProductRange.OrderSystem.WCF는 도메인 논리를 호출하고이를 노출 시키거나 내 도메인 논리 자체가 WCF 서비스 여야합니까? 후자의 경우 로컬 논리를 통해 WCF를 통해 내 도메인 논리를 항상 참조해야합니까?

필자는 어떤 레이어가 있어야하는지, 솔루션 간 상호 연결을 제공하는 방법에 대한 지침을 찾고 있습니다.

+0

http://programmers.stackexchange.com에 속한 –

+1

질문 : http://programmers.stackexchange.com/questions/212514/domain-logic-in-service-layer-exposed-as-wcf-service –

답변

0

단일 또는 다중 레이어를 사용하여 데이터 수집 및 서비스 계약으로 pocos를 노출 할 수 있습니다.

예를 들어

:이 프로젝트 (데이터 만 계약 및 서비스 계약)를 참조와 같은 인터페이스를 통해 투명 프록시를 만들 수 있습니다 클라이언트 측에서

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)을 선택하십시오.