我有一个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
{
}
答案 0 :(得分:4)
我建议您将Model Layer
与Contract Layer
分开。我认为合同在应用程序和服务之间应该像DTOs
或Messages
一样,就是这样。
- 编辑 -
Model Layer/Business Layer
:由Business Logic
和Business 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;
}
}
如果您在此处看到,则合同GetUsersResponse
由List of Users
组成。它用于将Users
从Service
转移到Client
。
另一方面,Model Layer
对Contract Layer
一无所知。这很重要。 Business Entities
对其他图层不了解任何内容。 Business Layer
中应该始终有一些类来填充Data Layer
中的这些实体。