【问题标题】:Is it possible to extend a partial class to implement notify property changed?是否可以扩展部分类以实现通知属性已更改?
【发布时间】:2015-12-22 15:41:23
【问题描述】:

好吧,我有一个部分类用作 POCO 实体,但我也将它用作 DTO,通过 WCF 将数据从服务器传输到客户端。这个类只有我需要从数据库中存储数据的属性。

但是,在我的客户端,我需要这些类在客户端实现通知属性已更改,以便在我的 WPF MVVM 项目中使用。

我想知道是否有可能拥有扩展类,如果它是同一个类。我的意思是我想避免将信息从我的班级传递给我的扩展班级。我希望这两个类是相同的。我的想法是在一个程序集中将基本类作为 DTO,在另一个程序集中使用扩展类,因此客户端将使用此扩展程序集,但它将是同一个类,因此我可以评估从服务接收到的类到扩展类,无需任何转换。

非常感谢。

【问题讨论】:

标签: wpf wcf poco inotifypropertychanged


【解决方案1】:

如果你使用实体作为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/

希望对您有所帮助。

【讨论】:

    【解决方案2】:

    创建另一个项目(例如名为 Solution.Infrastructure),其中包含正在交换的文件。在 WCF 和 WPF 项目中添加对 Inrrastructure 的引用。因此,两者都将使用等效类,您可以轻松实现 INotifyPropertyChanged。 Wpf 将能够利用它,WCF 实际上永远不会从 UI 刷新机制中受益。

    【讨论】:

    • 对不起,我还不清楚细节。这个项目有实现 INotifyPropertyChanged 的​​类,这些类用于 WCF 和 WPF?所以我们可以说 DTO 类实现了 INotifyPropertyChanged。非常感谢。
    • 如果您从服务和客户端发送 DTO,您的意图是这些类刷新 UI,而不是让它们实现 INotifyPropertyChanged 并将它们放在单独的项目中(例如基础设施)。 WPF 将使用 INotifyPropertyChanged,WCF 不会,因为没有 UI。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多