我可以与xamarin iOS共享UWP viewmodels吗?

我可以与xamarin iOS共享UWP viewmodels吗?,xamarin,uwp,xamarin.ios,xamarin.mac,Xamarin,Uwp,Xamarin.ios,Xamarin.mac,Xamarin和UWP之间实际的代码共享量是多少 我有一个应用程序,它有以下几层: 1.UWP平台特定API 2.基于这些API的消息传递协议 3.服务 4.视图模型 5.与INotifyPropertyChanged和ICommand通信的Xaml视图 我明白显然1(平台特定API)和5(xaml视图)不能共享。第二层和第三层应该可以。ViewModels呢?我认为应该可以使用ViewModelAdapter的薄层来实现这一点,这现实吗 另外,我不打算使用xamarin.forms。答案取决于

Xamarin和UWP之间实际的代码共享量是多少

我有一个应用程序,它有以下几层: 1.UWP平台特定API 2.基于这些API的消息传递协议 3.服务 4.视图模型 5.与INotifyPropertyChanged和ICommand通信的Xaml视图

我明白显然1(平台特定API)和5(xaml视图)不能共享。第二层和第三层应该可以。ViewModels呢?我认为应该可以使用ViewModelAdapter的薄层来实现这一点,这现实吗


另外,我不打算使用xamarin.forms。

答案取决于您的应用程序

UWP有许多特定的API,因此在Xamarin上不起作用。它们不必仅与视图相关,还可以与viewmodel代码相关。如果您的viewmodel是一个单独的.Net标准项目,那么您可以完全重用它,但由于UWP应用程序并不总是如此,因此您可能可以重用大部分代码


第二部分是在iOS/macOS项目中实际使用此viewmodel。由于您不想使用XAML(Xamarin.Forms),因此没有提供数据绑定。基本上,您必须手动执行整个数据绑定。一些MVVM框架可能在这方面对您有所帮助,但如果您问我,它们应该被称为“帮助者”,而不是框架。

答案取决于您的应用程序

UWP有许多特定的API,因此在Xamarin上不起作用。它们不必仅与视图相关,还可以与viewmodel代码相关。如果您的viewmodel是一个单独的.Net标准项目,那么您可以完全重用它,但由于UWP应用程序并不总是如此,因此您可能可以重用大部分代码


第二部分是在iOS/macOS项目中实际使用此viewmodel。由于您不想使用XAML(Xamarin.Forms),因此没有提供数据绑定。基本上,您必须手动执行整个数据绑定。一些MVVM框架可能在这方面对您有所帮助,但如果您问我,它们应该被称为“帮助者”,而不是框架。

这取决于。。。但是,当你的iOS应用程序与UWP应用程序具有相同的视图逻辑时,那么是的,它们可以共享,这取决于。。。但是,当您的iOS应用程序与UWP应用程序具有相同的视图逻辑时,则可以共享。如果您的视图模型包含与平台相关的代码,则表示您做错了。@SirRufo不在UWP上。例如,有UWP平台特定的代码用于解析RSS提要,这应该属于viewmodel。您可能会认为,Microsoft将此平台特定化是错误的,但这超出了此处讨论的范围。不,应用层定义了一个RSSParsingService接口,ViewModels可以使用该接口,但具体的服务是在基础架构层或UWP项目中实现的(选择最适合的)@SirRufo如果您最初的项目范围是支持UWP,那么不这样做没有错。同样,所有Microsoft示例都是这样工作的。如果你想证明你可能有一个单独的意见,你可以。但这不是UWP开发标准。冷静点。我知道理论和实践之间有差距。许多应用程序和示例(甚至来自微软)都在使用捷径,只是为了完成工作,并打破理论。但除了设计时间太少之外,没有理由这么做。顺便说一句:我也经常使用这样的快捷方式,但我知道这些只是快捷方式,而不是它应该是。所以我知道我什么时候做错了什么,我知道为什么(更少的时间)如果你的视图模型包含平台相关的代码,那么你就做错了。@SirRufo不在UWP上。例如,有UWP平台特定的代码用于解析RSS提要,这应该属于viewmodel。您可能会认为,Microsoft将此平台特定化是错误的,但这超出了此处讨论的范围。不,应用层定义了一个RSSParsingService接口,ViewModels可以使用该接口,但具体的服务是在基础架构层或UWP项目中实现的(选择最适合的)@SirRufo如果您最初的项目范围是支持UWP,那么不这样做没有错。同样,所有Microsoft示例都是这样工作的。如果你想证明你可能有一个单独的意见,你可以。但这不是UWP开发标准。冷静点。我知道理论和实践之间有差距。许多应用程序和示例(甚至来自微软)都在使用捷径,只是为了完成工作,并打破理论。但除了设计时间太少之外,没有理由这么做。顺便说一句:我也经常使用这样的快捷方式,但我知道这些只是快捷方式,而不是它应该是。所以我知道什么时候我做错了什么,我知道为什么(更少的时间)