C# 如何在UWP应用程序中将Android和Windows的表示层分离?

C# 如何在UWP应用程序中将Android和Windows的表示层分离?,c#,android,wcf,xamarin,uwp,C#,Android,Wcf,Xamarin,Uwp,我在Silverlight有一个更大的企业级应用程序。我想把它转换成一个Windows10UWP应用程序,这不会太难,我希望大约80%的应用程序都能顺利完成 然而,我看到UWP应用程序可以使用Xamarin针对Android和苹果 任何人都可以分享一个实用指南-如何实现这一点 我预计Xamarin“版本”的应用程序中会有50%的功能,因为平板电脑上的屏幕不够,其他功能可能不可用 在Windows应用程序和它的移动mini-me之间尽可能多地重用代码的最佳架构是什么 如何组织VS项目和共享库等?

我在Silverlight有一个更大的企业级应用程序。我想把它转换成一个Windows10UWP应用程序,这不会太难,我希望大约80%的应用程序都能顺利完成

然而,我看到UWP应用程序可以使用Xamarin针对Android和苹果

任何人都可以分享一个实用指南-如何实现这一点

我预计Xamarin“版本”的应用程序中会有50%的功能,因为平板电脑上的屏幕不够,其他功能可能不可用

在Windows应用程序和它的移动mini-me之间尽可能多地重用代码的最佳架构是什么

如何组织VS项目和共享库等?


另外,Windows应用程序中的数据访问将是使用EF和Oracle的WCF。我可以很容易地将WCF呼叫镜像到移动应用程序的REST服务中。

首先,我想问以下几个问题:

特定于平台的功能有多重要? 自定义UI有多重要 如果你对上述问题的答案是正确的,那么它们就不是很重要了

然后创建一个Xamarin.Forms项目,并在SharedLibrary项目中组织RestAPI服务代码

共享项目(有时也称为共享资产项目)允许您编写在多个目标项目(包括Xamarin应用程序)之间共享的代码。代码作为每个引用项目的一部分进行编译,可以包含编译器指令,以帮助将特定于平台的功能合并到共享代码库中

然而,您也可能认为您希望对每个平台使用一些小的特定代码,然后可以查看每个项目中的自定义渲染器, 项目ios、项目droid、项目UWP

然后可以在共享项目中使用XAML编写共享视图。 希望我能回答你的问题。

UWP不能针对Android和iOS。但是,如果您选择一个Xamarin.Forms项目模板,那么您可以将UWP、Android和iOS作为目标。这将创建一个共享或PCL库,您可以在其中使用平台无关代码

如果选择Xamarin.Forms,不要期望Silverlight XAML的转换为1:1,因为Xamarin.Forms提供的转换与Silverlight、WPF或UWP本机提供的转换不完全相同。不过,情况非常相似,如果您的Silverlight应用程序主要使用按钮、文本框等标准控件,则转换UI不会花费太多时间

Forms并不是万能的,所以您可能需要调整,甚至可能需要为它编写一些自定义控件,以使您的应用程序在所有目标平台上工作

至于构建应用程序的好方法,这主要是基于观点的。然而,许多人使用MVVM模式来强制分离关注点。这非常适合Xamarin.Forms以及它内置的绑定,正如您从使用XAML编写UI代码中所期望的那样。 但实现Redux、VIPER或其他设计模式也应该是可能的。您将发现大多数使用MVVM的示例。还有很多用于Xamarin.Forms的MVVM库,因此您可以抢先一步

Forms是跨平台共享UI代码的好方法。但是,如果你想完全控制你的UI,你可以考虑使用XAMARIN编写本地应用程序,尽管没有表单。这种方法将迫使您更深入地了解每一个平台,因为它们在生命周期、UI等方面表现不同

Xamarin.Forms项目提供的项目结构可以是共享项目或PCL,然后是每个目标平台的应用程序项目,这是一种很好的攻击方法。共享代码进入PCL或共享项目,特定于平台的代码进入应用程序项目。具体如何管理和构造代码取决于您


TL;DR:MVVM,不要期望从Silverlight到Xamarin.Forms的1:1转换。

只是为了澄清一下-我说的是在UI端共享代码。完全忘记服务器端,一切都会好起来的。。但是谢谢你的自定义渲染器想法,我会仔细研究的。@BoppityBop没问题,我能想到的共享UI代码的唯一方法就是你在共享项目中编写的xaml。。。快乐,好的。由于许多原因,迁移到xamarin作为主要代码库对我来说没有意义。。这根本不行。。我希望制作一个UWP,然后再制作一个小型克隆,具有针对android/ios的精简功能。。(主要是因为预计这不会很难)我认为这个问题主要是基于观点的,而且范围太广。当你写这个问题时,你的期望是什么?此外,你对自己的问题几乎没有研究,完全误解了UWP是什么和Xamarin做什么,或者至少你的问题是如何出现的。它只是加强了真正结束这个问题的理由。这可能很敏感,因为这是你的问题,你对此有感觉,但没有理由像你刚才那样概括和侮辱别人。看到你有超过3k的分数,你应该知道如何提问。