好吧,我有一个我用作POCO实体的部分类,但我也使用它作为DTO将数据从服务器传输到带有WCF的客户端。该类只具有存储数据库中数据所需的属性。
但是,在我的客户端,我需要这个类在客户端实现notify属性已更改,以便在我的WPF MVVM项目中使用。
我想知道是否有可能有扩展类,如果它是同一个类。我的意思是我想避免将我的课程中的信息传递给我的扩展课程。我想这两个类是一样的。我的想法是在一个程序集中将基本类作为DTO,而在另一个程序集中作为扩展类,所以客户端将使用这个扩展程序集,但它将是同一个类,所以我可以帮助我从服务中收到的类到扩展类而不需要任何转换。
非常感谢你。
答案 0 :(得分:2)
如果您将实体用作DTO,则只应将其用作DTO,这意味着仅从服务器转移到客户端,在客户端中应创建另一个模型,然后将DTO映射到模型中。客户。因此,在模型中,您可以实现您喜欢的任何内容。
假设您有以下Person人物实体:
public Person
{
public string Name { get; set; }
public DateTime BirthDate { get; set; }
}
您的DTO将是这样的:
[DataContract]
public class PersonDTO
{
[DataMember]
public string Name { get; set; }
[DataMember]
public DateTime BirthDate { get; set; }
}
你的模特在客户端:
public PersonModel : INotifyPropertyChanged
{
public string Name { get; set; }
public DateTime BirthDate { get; set; }
}
通过这种方式,您可以分离DTO和模型之间的逻辑,因为DTO的全部要点是传递低容量的数据。
现在,为了从实体映射到DTO或从DTO映射到模型,您可以手动执行,或者您可以在此处检查AutoMapper:http://automapper.org/。
希望它有所帮助。
答案 1 :(得分:0)
创建另一个项目(例如名为Solution.Infrastructure),其中包含要交换的文件。在WCF和WPF项目中添加对基础结构的引用。因此,两者都将使用等效的类,您可以毫不费力地实现 INotifyPropertyChanged 。 Wpf将能够利用它,WCF实际上永远不会受益于UI刷新机制。