2009-06-03 2 views
2

이 항목에 대해 비슷한 질문이 있지만 동일한 문제를 해결하고 있다고 확신하지 못했습니다. 그럼 그냥 분명히 ...WCF에서 기존 비즈니스 개체 노출

유형, 비즈니스 로직 및 데이터 액세스를위한 네임 스페이스가있는 기존 클래스 라이브러리가 있습니다. 논리 및 데이터 액세스 네임 스페이스의 클래스는 정적이며 데이터가있는 유형 인스턴스를 채우거나 이미 가득 찬 유형 인스턴스를 가져 와서 데이터베이스에 삽입 또는 업데이트를 수행하는 기본적인 방법이 있습니다.

이제는이 라이브러리를 직접 참조하는 기존 응용 프로그램 외에도 WCF 서비스를 만들어 다른 응용 프로그램이 이러한 방식으로 개체와 메서드를 사용할 수있게하려고합니다.

내가 보는 모든 WCF 터널은 서비스 프로젝트에서 도메인 개체를 만듭니다.하지만 두 곳에서 내 개체를 정의하고 싶지는 않습니다.

그래서 기존 클래스 라이브러리에서 직렬화를 참조하고 [DataContract] 및 [DataMember]와 같은 형식 클래스를 표시 할 수 있다고 생각했습니다. 그런 다음 WCF 프로젝트에서 [OperationContract] 메서드를 사용하여 [ServiceContract] 인터페이스를 만들어 노출하려는 기존 라이브러리의 정적 논리 클래스와 메서드를 찾습니다. 그런 다음 WCF 프로젝트에서 기존 클래스 라이브러리를 참조하고 기존 라이브러리 유형을 반환하는 기존 라이브러리 논리 메서드를 호출하는 메서드를 포함하여 WCF 인터페이스를 구현합니다.

좋은 패턴입니까?

답변

5

소리가 좋지만 처음에 보이는 것보다 직렬화를 개선하는 것이 더 어려워지는 경향이 있습니다. 몇 가지 간단한 데이터 계약을 서비스 계층에 구축 한 다음 서비스 계층과 비즈니스 계층 사이에있는 작은 계층을 구축하여 데이터 계약을 비즈니스 개체로 변환하거나 그 반대의 작업을 수행하는 것이 좋습니다.

1

비즈니스 개체를 직렬화 할 수 있다고 가정하면 (Serializable 특성 사용) 한 가지 방법으로 데이터 계약이 될 DataContainer 개체를 만들 수 있습니다. 이 객체는 CRUD 메소드에서 사용됩니다. 사용자 인터페이스는

는 그런 다음 바이트의 배열로 객체를 팩과이를 전달하는 바이너리 직렬화를 사용하는 것이 업데이트 (DataContainer의 OBJ) 삽입 (DataContainer의 OBJ)

등이 될 수 예를 들어

WCF를 통해 반대쪽에서 다시 BinarySerialization을 사용하여 비 직렬화합니다. 양측 (클라이언트와 서버)이 비즈니스 오브젝트 유형을 가진 유효한 버전의 어셈블리를 가지고 있는지 확인해야합니다.

+0

감사합니다. 실제로 나는 언급하지 않았지만, 내가하려고하는 일 중 하나는 도서관을 서비스의 소비자에게 보내지 않는 것입니다. –

관련 문제