MVVM客户端中的WCF契约和模型

时间:2010-12-14 16:50:45

标签: .net wpf wcf mvvm

我有一个WCF服务,以及一个使用MVVM模式构建的WPF客户端应用程序。引用的WCF服务允许WPF客户端操作描述可以从服务发送和接收的数据的合同。

执行合同,定义服务方:

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

如果我将这些引用的契约视为我的MVVM应用程序的模型层的一部分,那么这些契约与我的Model Tier的模型类之间的关系应该是什么? (客户端的代码示例)

1。继承?模型继承合同。

public class UserModel : UserContract

2。组合?模型包含相应合同的实例。

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

第3。添加?合同被宣布为部分,我可以“完成”合同,并直接将它们用作我的模型类。

public partial class UserContract
{
}

1 个答案:

答案 0 :(得分:4)

我建议您将Model LayerContract Layer分开。我认为合同在应用程序和服务之间应该像DTOsMessages一样,就是这样。

- 编辑 -

  • 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; }
}

服务:

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对其他图层不了解任何内容。 Business Layer中应该始终有一些类来填充Data Layer中的这些实体。