gpt4 book ai didi

.net - MVVM客户端中的WCF契约(Contract)和模型

转载 作者:行者123 更新时间:2023-12-03 10:22:00 25 4
gpt4 key购买 nike

我有一个使用MVVM模式构建的WCF服务和WPF客户端应用程序。引用的WCF服务允许WPF客户端操纵契约(Contract),契约(Contract)描述了可以从该服务发送和接收的数据。

示例契约(Contract),定义了服务方:

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

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

1.继承? 模型继承契约(Contract)。
public class UserModel : UserContract

2.组成? 模型包含相应契约(Contract)的一个实例。
public class UserModel
{
public UserContract userContract {get;set;}
}

3.添加? 契约(Contract)被声明为部分契约(Contract),我可以“完成”契约(Contract),并将其直接用作模型类。
public partial class UserContract
{
}

最佳答案

我建议您将Model LayerContract Layer分开。我觉得契约(Contract)应该像应用程序和服务之间的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;
    }
    }

    如果在此处看到,契约(Contract) GetUsersResponseList of Users组成。它用于将 UsersService传输到 Client

    另一方面, Model LayerContract Layer一无所知。那很重要。 Business Entities应该对其他图层一无所知。 Business Layer中应始终存在从 Data Layer填充这些实体的类。

    关于.net - MVVM客户端中的WCF契约(Contract)和模型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4441768/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com