c# - prism mvvm 服务器和客户端具有相同的模型

标签 c# mvvm uwp prism

我的服务器正在使用包含所有模型类的程序集 (model.dll)。
我想使用 MVVM 在我的 UWP-Client-App 中使用这些类。

在 MVVM 中,我所有的模型类都必须继承 BindableBase(Prism)。
有没有办法在我的客户中使用相同的模型类,或者我必须再次为客户创建它们?

我能看到的唯一方法是所有模型类都继承 BindableBase 但我在服务器上不需要这种依赖关系......

最佳答案

由于您想在服务器和客户端上使用这些类,我想您正在考虑将它们放入 PCL(可移植类库)中,因此您只需为每个模型维护 1 个文件。这意味着您想要在客户端上的所有代码也将在服务器上可用。

Prism 的 BindableBase 只不过是 INotifyPropertyChanged 的辅助实现.所以你可以使用 BindableBase或实现INotifyPropertyChanged你自己。无论哪种方式,您的后端都会有一些“前端”代码。

请注意,要能够使用 BindableBase ,您没有自动属性,但有属性 setter 来触发 INotifyPropertyChanged (当您自己实现接口(interface)时也是如此)。

private string _name;
public string Name
{
    get { return _name; }
    set { SetProperty(ref _name, value); }
}

我通常做的是为我的模型创建一个 PCL,添加 Prism.Core NuGet 包(它本身就是一个 PCL)并与我的服务器上的“前端”代码一起使用。如果您想知道 Prism.Core 中的代码,这就是 Source/Prism folder 下的所有内容。 .您不需要在服务器端引入 Prism.Windows。

你有什么选择?
  • 将所有模型编写两次,一次使用服务器的自动属性,一次使用 BindableBase/INotifyPropertyChanged 用于客户端。在您的模型不一致之前,我给它不到一周的时间。 Tou 反驳说,您可以进行代码(重新)生成以生成双方之一。
  • 使用Fody用于 INotifyPropertyChanged 而不是 Prism 的 BindableBase ,您可以继续使用 Prism 的其余部分。但在我看来,这有同样的问题,将Fody的属性带到服务器上。
  • 使用链接的项目文件在服务器和客户端之间共享模型,因此文件仍然只存在一次。使每个类成为局部类,在客户端中放置第二个局部类并将 Fody 的属性放在该定义上。对我来说似乎很麻烦。

  • 结论:无论您使用的是 Prism 还是 Fody,都要学会忍受对服务器端的小依赖,这会带来单一模型的巨大优势。

    关于c# - prism mvvm 服务器和客户端具有相同的模型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43222971/

    相关文章:

    c# - 我应该通过绑定(bind)使用 MVP 和 WPF 显示数据吗?

    wpf - 使用 WPF 在 Catel 中设置 DataContext

    sqlite - 添加迁移命令在 UWP 应用程序的 EF 7 中不起作用

    uwp - RaisePropertychanged 为 null,datacontext 改变后不通知属性

    c# - 如何在 UWP 中使用 ListView 捕获点击?

    c# - nhibernate 连接表和自定义类型

    c# - .Net 是否有 org.apache.commons.lang.StringEscapeUtils 的实现?

    wpf - 防止 WPF Frame 将历史记录存储在堆栈中

    c# - Windows Phone 8.1 商店应用程序 - 商店链接

    c# - LINQ Parallel.ForEach<> 循环上的 lock 关键字