2010-03-04 6 views
0

다른 사람들이이 상황을 어떻게 처리할지 궁금합니다. 주소 개체가 포함 된 도메인 계층이 있습니다. 그런 다음이 객체를 사용하는 응용 프로그램이 있습니다. 또한 asp.net asmx 웹 서비스는 제 3 자 웹 서비스로 나가서 주소 확인을 수행합니다.웹 참조로 어셈블리 분리

이 기능을 처리하는 방법이 궁금합니다. 나는 도메인 계층의 웹 서비스에 액세스하기 위해 서비스 레퍼런스와 코드를 넣고 싶지 않다. 또한 응용 프로그램 계층에 넣는 것도 잘못된 것처럼 보입니다.

현재 가장 좋은 솔루션은 원래 도메인 계층과 유효성 검사 웹 서비스를 참조하는 세 번째 어셈블리를 만드는 것입니다. 이렇게하면 외부 참조없이 도메인 계층을 조금 더 깨끗하게 유지할 수 있습니다. 이 상황을 어떻게 처리할까요?

답변

0

글쎄, 응용 프로그램 (UI) 로직의 주소 부분이나 도메인 요구 사항의 일부분을 확인하고 있습니까?

앱 기능이라면 앱 레이어에 들어갑니다. 핵심 도메인 기능인 경우 도메인 계층에 포함됩니다.

예를 들어 미래에 다른 주소 확인 서비스를 사용하기로 결정한 경우 커플 링이 우려된다면 그 위에 추상화를 적용하십시오. 인터페이스 및 래퍼 클래스를 만듭니다.

public interface IAddressValidator 
{ 
    bool ValidateAddress(Address address); 
} 

public class FooAddressValidator : IAddressValidator 
{ 
    private FooService service; 

    public FooAddressValidator(FooService service) 
    { 
     this.service = service; 
    } 

    public bool ValidateAddress(Address address) 
    { 
     return service.ValidateAddress(address.StreetLine1, address.City, 
      address.State, address.Country); 
    } 
} 

또는 논리가 무엇이든간에. 그런 다음 응용 프로그램 (또는 도메인 모델)을 서비스 자체 대신 IAddressValidator에 종속시키고 최 외 계층의 콘크리트 IAddressValidator 인스턴스에 팬으로 만듭니다.

코어 모델 IAddressValidator을 도메인 모델에 넣고 FooAddressValidator을 실행 파일에서만 참조되는 외부 어셈블리에 보관할 수 있습니다. 이렇게하면 도메인이 실제로 웹 서비스에 종속되지는 않지만 도메인 논리의 일부로 주소 유효성 검사를 계속할 수 있습니다.

실제로 웹 서비스 호출을 할 필요가 없기 때문에 주소 유효성 검사 구성 요소를 사용하는 것이 훨씬 쉽습니다. 다른 MockAddressValidator 인스턴스를 사용할 수 있습니다.

+0

의견을 보내 주셔서 감사합니다. 나는 이것이 핵심 도메인 기능이며 모든 애플리케이션이 주소의 유효성을 검사 할 수 있어야한다고 생각한다. 다시 한번 감사드립니다. –

관련 문제