是否可以扩展部分 class 以实现通知 属性 已更改?

Is it possible to extend a partial class to implement notify property changed?

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

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

我想知道是否可以扩展 class,是否相同 class。我的意思是我想避免将信息从我的 class 传递到我的扩展 class。我希望这两个 class 是相同的。我的想法是在一个程序集中使用基本的 class 作为 DTO,在另一个程序集中使用扩展的 class,这样客户端将使用这个扩展的程序集,但它是相同的 class,所以我可以将从服务收到的 class 分配给扩展的 class 而无需任何转换。

非常感谢。

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

如果您将实体用作 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/.

希望对您有所帮助。