2010-12-14 3 views
1

MVC 패턴을 사용하여 작성된 WCF 서비스 및 WPF 클라이언트 응용 프로그램이 있습니다. 참조 된 WCF 서비스를 사용하면 WPF 클라이언트가 서비스에서 보내고받을 수있는 데이터를 설명하는 계약을 조작 할 수 있습니다.MVC 클라이언트의 WCF 계약 및 모델

Exemple 계약, 정의 된 서비스 측면 :

[DataContract()] 
public class UserContract : BaseContract 
{ 
    [DataMember()] 
    public string UserName { get; set; } 
    [DataMember()] 
    public string FirstName { get; set; } 
} 

나는이 계약 사이의 관계이어야한다 무엇을 내 MVVM 응용 프로그램의 모델 계층의 일부로서 그 참조 계약, 그리고 모델 클래스를 고려하는 경우 내 모델 티어? (클라이언트 측 코드 예제)

1. 상속? 모델은 계약을 상속합니다.

public class UserModel : UserContract 

2. 조성? 모델에는 해당 계약의 인스턴스가 있습니다.

public class UserModel 
{ 
    public UserContract userContract {get;set;} 
} 

3. 추가? 계약이 부분적으로 선언되었으므로 계약을 "완료"하여 모델 클래스로 직접 사용할 수 있습니다.

public partial class UserContract 
{ 
} 

답변

4

난 당신이 Contract Layer에서 Model Layer 분리를 유지해야 좋습니다. 나는 계약이 응용과 서비스 사이에 DTOs 또는 Messages과 같이 행동해야한다고 느낍니다.

--EDIT--

  • Model Layer/Business Layer

    : Business LogicBusiness Rules 구성.

  • Contract Layer : 데이터를 올바르게 보내거나 받기 위해 필요한 기타 정보가 Models입니다.

예 :

[예는 요청/응답 패턴을 사용한다.]

모델 :

public class User 
{ 
    public String Username { get; set; } 
    public String Password { get; set; } 
} 

계약 :

public class GetUsersRequest 
{ } 

public class GetUsersResponse 
{ 
    public List<User> Users { get; set; } 
    public Boolean IsSuccess { get; set; } 
} 

서비스 :

0 여기에 표시되는 경우
public interface IUserService 
{ 
    GetUsersResponse GetUsers(GetUsersRequest request); 
} 

public class UserService : IUserService 
{ 
    public GetUsersResponse GetUsers(GetUsersRequest request) 
    { 
     GetUsersResponse response = new GetUsersResponse(); 
     //... 
     return response; 
    } 
} 

는 계약 GetUsersResponseList of Users로 구성되어있다. UsersService에서 Client으로 전송하는 데 사용됩니다.

반면에 Model LayerContract Layer에 대해 알지 못합니다. 그것은 중요합니다. Business Entities은 다른 레이어에 대해 알지 않아야합니다. 이 엔티티를 Data Layer에서 채우는 클래스가 항상 Business Layer이어야합니다.

+0

@decyclone : 분리 - 계약은 수신에 대한 모델을 작성하는 데 사용되며, 모델은 다른 작업 동안 링크가 유지되지 않은 다른 오브젝트 (저장소/공장)를 통해 전송 계약을 작성하는 데 사용됩니다. – Matthieu

+0

@decyclone : 수정 사항을 고려하여 서비스 측에 Model 레이어를 완전히 유지하고 클라이언트 측에서 "봉인"하는 것이 좋습니다. – Matthieu

+0

아니요, 서비스와 클라이언트가 공유하는 어셈블리 여야합니다. – decyclone