2013-03-22 4 views

답변

4

나는 다른 프로젝트에서 분할 것 :

  • Foo.DataContracts
  • Foo.BusinessModels
  • Foo.Services

참조 BusinessModels 및 서비스에 DataContracts. 그런 다음 AutoMapper을 사용하여 모델 클래스를 계약 클래스에 매핑하고 그 반대의 경우도 마찬가지입니다. 그런 다음 계약에 의존하기 때문에 나중에 WCF 클라이언트를 손상시키지 않고 모델을 변경할 수 있습니다.

+0

전체 픽처를 제공하지 않은 경우 미안 : 비즈니스 레이어 (프로젝트), 데이터 레이어 (프로젝트) 및 프리젠 테이션 레이어 (웹 사이트)가있는 기존 애플리케이션/솔루션이 이미 있습니다. – Gadam

+0

좋아, 그래서 당신의 WCF에 대한 다른 프로젝트 (서비스)를 만듭니다. 그런 다음 모델에 대한 비즈니스 계층 프로젝트를 참조 할 수 있습니다. 데이터 계약에 대해 별도의 프로젝트를 만들지 않으려면 새 계약 프로젝트에 추가하십시오. 모델 <-> 계약을지도하십시오. – funeralfunk

+0

그런 질문에 대답 해 주셔서 감사합니다. 남은 의심의 여지가 있습니다. 왜 데이터 계약을 모두 으로 정의해야합니까? 내 서비스에서 BL에 대한 참조가 있으므로 대신 (BO) 객체를 직접 사용할 수 있습니까? (왜냐하면 그들은 정확히 똑같을 것이고 심지어 이름 일 것입니다). 또한 오토 매퍼에 대해 배우고 싶지 않기 때문에 몇 가지 객체에 대해 이야기하고 있습니다. 내 서비스 프로젝트 내에 새 클래스 파일을 만들어야하고 메서드를 사용하여 계약에 따라 <--> BO 속성을 매핑해야한다고 말할 수 있습니까? 그게 다야? 다시 한 번 감사드립니다 – Gadam

0

비즈니스 논리를 직렬화에 대한 우려없이 혼란스럽게 만들지 않고도 비즈니스 객체를 직렬화 할 수 있다면 나는 그것을 향해 말할 것입니다.

더 나은 대안은 서비스 계층 뒤에 비즈니스 로직 계층을 가져오고 뷰에서 바인딩 할 수있는 서비스의 간단한 DTO를 노출하는 것입니다.

이 나는 ​​번역 WCF RIA Services이 접근 방식에 기사 꽤 잘 표준 WCF 웹 서비스

지금까지 AutoMapper을 사용하지 않은 비록 내가 @valpolushkin의 같은 라인에서 생각
+0

감사합니다. 기사를 볼 것입니다. SL 뒤에 SL을 '가져 오는 것'은 무엇을 의미합니까 - 데이터 계약을 만들고이를 BO에 매핑하는 것을 의미한다고 가정합니다 ...? – Gadam

0

을 썼다.

데이터 계약으로 비즈니스 엔티티를 사용하면 변경 사항이 변경 될 수있는 예를 보려면 WCF Message & Data Contract, DTO, domain model, and shared assemblies의 대답을 참조하십시오.

저는 Business Objects를 DataContracts로 사용하는 것은 매우 나쁜 습관이라고 생각합니다. 서비스는 자율적이어야합니다. 이 서비스는 Lax 버전 관리 기능이 있거나없는 클라이언트에서 사용할 수 있습니다.

Service Versioning을 참조하십시오.

새 구성원을 추가해도 기존 클라이언트가 손상되지 않는다고 쉽게 생각할 수 있습니다. 모든 클라이언트가 느린 버전 관리를 처리 할 수 ​​있는지 확실하지 않은 경우 엄격한 버전 지침을 사용하고 데이터 계약을 변경 불가능한 것으로 간주하는 것이 좋습니다.

또한, 비즈니스 개체 및 데이터 계약 사이의 변환 MSDN - Service Layer Guidelines

디자인 변환 객체를 참조하십시오.