棱镜mvvm服务器和客户端具有相同的模型
prism mvvm server and client with same model
我的服务器正在使用包含所有模型 类 的程序集 (model.dll)。
我想在使用 MVVM 的 UWP-Client-App 中使用这些 类。
在 MVVM 中,我所有的模型-类 都必须继承 BindableBase(Prism)。
有没有办法在我的客户端中使用相同的模型-类,或者我是否必须重新创建它们,特别是为客户端?
我能看到的唯一方法是所有模型-类 都继承了 BindableBase 但我在服务器上不需要这种依赖性...
因为您想在服务器和客户端上都使用 classes,我想您正在考虑将它们放入 PCL(便携式 Class 库)以便您每个模型只有 1 个文件需要维护。这意味着您在客户端上需要的所有代码也将在服务器上可用。
Prism 的 BindableBase
只不过是 INotifyPropertyChanged
的辅助实现。因此,您可以使用 BindableBase
或自己实施 INotifyPropertyChanged
。无论哪种方式,您的后端都会有一些 'frontend' 代码。
请注意,为了能够使用 BindableBase
,您没有自动属性,但是 属性 setter 触发 INotifyPropertyChanged
(与您自己实现接口时相同) .
private string _name;
public string Name
{
get { return _name; }
set { SetProperty(ref _name, value); }
}
我通常做的是为我的模型创建一个 PCL,添加 Prism.Core NuGet package (which is a PCL itself) and live with the 'frontend' code on my server. If you want to know what code is in Prism.Core, that's everything under the Source/Prism folder。服务器端不需要带入Prism.Windows
你有什么选择?
- 将所有模型写入两次,一次为服务器使用自动属性,一次为客户端使用 BindableBase/INotifyPropertyChanged。在你的模型不一致之前我给了它不到一周的时间。为了反驳这一点,您可以进行代码(重新)生成以生成双方之一。
- 对 INotifyPropertyChanged 使用 Fody 而不是 Prism 的
BindableBase
,您可以继续使用 Prism 的其余部分。但是我认为这有同样的问题,将Fody的属性带到了服务器。
- 使用链接的项目文件在服务器和客户端之间共享模型,因此文件仍然只存在一次。使每个 class 部分,在客户端中放置第二个部分 class 并将 Fody 的属性放在该定义上。对我来说看起来很麻烦。
结论:无论您使用的是 Prism 还是 Fody,都要学会忍受对服务器端的小依赖,这会带来单一模型的巨大优势。
我的服务器正在使用包含所有模型 类 的程序集 (model.dll)。 我想在使用 MVVM 的 UWP-Client-App 中使用这些 类。
在 MVVM 中,我所有的模型-类 都必须继承 BindableBase(Prism)。 有没有办法在我的客户端中使用相同的模型-类,或者我是否必须重新创建它们,特别是为客户端?
我能看到的唯一方法是所有模型-类 都继承了 BindableBase 但我在服务器上不需要这种依赖性...
因为您想在服务器和客户端上都使用 classes,我想您正在考虑将它们放入 PCL(便携式 Class 库)以便您每个模型只有 1 个文件需要维护。这意味着您在客户端上需要的所有代码也将在服务器上可用。
Prism 的 BindableBase
只不过是 INotifyPropertyChanged
的辅助实现。因此,您可以使用 BindableBase
或自己实施 INotifyPropertyChanged
。无论哪种方式,您的后端都会有一些 'frontend' 代码。
请注意,为了能够使用 BindableBase
,您没有自动属性,但是 属性 setter 触发 INotifyPropertyChanged
(与您自己实现接口时相同) .
private string _name;
public string Name
{
get { return _name; }
set { SetProperty(ref _name, value); }
}
我通常做的是为我的模型创建一个 PCL,添加 Prism.Core NuGet package (which is a PCL itself) and live with the 'frontend' code on my server. If you want to know what code is in Prism.Core, that's everything under the Source/Prism folder。服务器端不需要带入Prism.Windows
你有什么选择?
- 将所有模型写入两次,一次为服务器使用自动属性,一次为客户端使用 BindableBase/INotifyPropertyChanged。在你的模型不一致之前我给了它不到一周的时间。为了反驳这一点,您可以进行代码(重新)生成以生成双方之一。
- 对 INotifyPropertyChanged 使用 Fody 而不是 Prism 的
BindableBase
,您可以继续使用 Prism 的其余部分。但是我认为这有同样的问题,将Fody的属性带到了服务器。 - 使用链接的项目文件在服务器和客户端之间共享模型,因此文件仍然只存在一次。使每个 class 部分,在客户端中放置第二个部分 class 并将 Fody 的属性放在该定义上。对我来说看起来很麻烦。
结论:无论您使用的是 Prism 还是 Fody,都要学会忍受对服务器端的小依赖,这会带来单一模型的巨大优势。