@lsmn
2021-10-27T08:19:24.000000Z
字数 4244
阅读 697
202109
Xamarin.Forms正在向.NET MAUI演进,Xamarin社区工具包也在为转型做准备。InfoQ采访了Gerald Versluis。他是一位来自荷兰的微软软件工程师。在这次访谈中,我们探讨了Xamarin社区工具包、向MAUI的过渡以及他们未来的路线图。
Xamarin社区工具包是一个使用Xamarin.Forms进行移动开发的可重用的元素集,包括动画、行为、转换器、效果和辅助工具。它简化了在使用Xamarin.Forms构建iOS、Android、macOS、WPF和通用Windows平台(UWP)应用程序时常见的开发任务。对于新的或现有的Xamarin.Forms项目,Xamarin社区工具包可以通过Visual Studio NuGet获得。
由于Xamarin.Forms正在演变成.NET MAUI,Xamarin社区工具包(XCT)也在为过渡做准备。InfoQ采访了Gerald Versluis。他是一位来自荷兰的微软软件工程师。他是微软的高级软件工程师,是Xamarin 社区工具包开发和维护团队的核心一员。在这次采访中,我们探讨了XCT、向MAUI的过渡以及他们未来的路线图。
InfoQ:您希望看到XCT未来包含哪些特性?
Gerald Versluis:现在有很多很棒的控件和库都是由社区推动的,都是隐藏的宝藏,如果能把其中一部分添加到我们的小工具包里,那就太好了。我认为,对于Xamarin.Forms和.NET MAUI生态系统来说,在控件套件方面,仍有很大的改进空间。很多人都希望能有data grid或autosuggest之类的控件。因此,我们要么自己去创建这些东西,要么我们可以询问现有库的维护者是否愿意与我们合作并将其添加到工具包中。
这对大家都有利:维护者不必承担单独维护一个库的负担,库不再那么分散,它将被添加到一个活跃的、由微软支持的、更知名的库中。话虽如此,第三方供应商的控制套件做得很好,我们很难与之相媲美,但它们通常是付费的,所以并不适合所有人。这样,我们就多了选择,每个人都可以使用他们想要的控件。
但也不止于此。我认为,工具包的一个好处是,我们收集了很多人们正在使用的转换器。如果你使用过Xamarin.Forms,你可能知道至少有一个转换器是你在每个项目中都需要的。但你没有把它封装在一个库中,因为它太小了,你一次又一次地复制和粘贴它。也许你会在一个项目中对它进行调整,突然间你就有了多个版本。将这些东西集中在工具包中,我们会让维护工作变得更容易,你只需把它放入这个库,这个库可以为你提供Xamarin.Forms的一站式服务。我们希望能在.NET MAUI上继续这样做。
InfoQ:.NET MANI社区工具包已在实施,那Xamarin社区工具包的未来有什么规划?
Versluis:我们在Xamarin社区工具包(XCT)中所做的一切,在.NET MAUI社区(MCT)工具包中都需要进行(重新)评估。因为离.NET MAUI的发布越来越近了,我们在引入新特性时会越来越谨慎。
对于Xamarin.Forms以及.NET MAUI,我们大致遵循同样的路径。XCT和Forms一样,目前将主要是接收Bug修复和小的服务改进。同时,我们正在为MCT制定计划,看看我们保留哪些特性,放弃哪些特性。
实际上,这意味着我们将确保XCT可以继续使用Xamarin.Forms,并且可以用于iOS、Android和UWP的新版本,但不会增加新特性。当对Forms的支持结束时,对XCT的支持也将结束。
回到可能被MCT放弃的特性,不用担心!我们还有一个XCT的兼容版本.NET MAUI Compat。如果你现在对.NET MAUI有所了解,你就知道你可以启用一个兼容层,这样你的Xamarin.Forms渲染器等仍然可以在.NET MAUI中使用,直到你有时间按照新的架构重写它们。
XCT .NET MAUI Compat版本将拥有XCT的一切,但与.NET MAUI兼容。因此,我们对每种情况都有解决方案,你永远不会被迫放弃今天已在使用的任何功能。
InfoQ:现在,我们有了两个社区工具包,您觉得它们应该变成一个吗?
Versluis:随着向.NET MAUI社区工具包的迁移,实际上,它们某种程度上正在变成一个。对于其他工具包,最值得注意的是Windows社区工具包。从Xamarin社区工具包开始,我们就一直与他们保持着密切的联系,但在那时,比较难形成合力。
现在,随着工具包开始从头重写,我们获得了一个独一无二的机会,与Windows社区工具包开展了更紧密地合作。这意味着我们有了一个统一的名称:CommunityToolkit.Maui和CommunityToolkit.Windows,我们共享一个GitHub组织,我们所有的代码都在这里,只要有可能,我们就会分享代码,避免重复工作。
他们会不会成为一个很大的库?我认为不会如此。不会比我刚才描述的多。对于这一点,我认为最好是了解一下不同的软件开发工具包(SDK),以及它们如何相互配合。Windows社区工具包(WCT)针对的是UWP,或者说是Windows。.NET MAUI针对的是UWP,但也包括iOS、Android、macOS等等。因此,举例来说,在控件方面,这将意味着我们必须匹配WCT中现有的每一个控件。它们已经有了很多控件,但也有很多控件在桌面上运行得非常好,在移动端上却不那么好。
除了控件之外,WCT还包含了MvvmLight,并在CommunityToolkit.Mvvm中做了他们自己的演化,这很棒!由于Windows和.NET MAUI通过XAML共享很多相同的概念,我们现在可以在两个工具包中共享MVVM框架。这样做的同时,我们从我们的工具包中删除了一些概念,这些概念让我们接近于自己实现一个MVVM框架,这是我们不想做的。现在,我们可以把我们的ObservableCollection改进和其他东西从我们的工具包中拿出来,放到CommunityToolkit.Mvvm包中。这样一来,那些对MVVM不感兴趣的人就不会获取到他们不使用的代码,但仍然可以非常容易地添加它。
单个大库在依赖性方面也有很大的缺点。特别是在Android上,不同的控件存在于不同的Android包中。把所有东西都放在一个库里意味着人们会有大量他们可能永远都不会使用的依赖。这是我们在XCT和MCT中都努力达成的一种平衡。
我们现在的组织方式使我们能够真正地混搭。我们可以在可能的情况下共享代码,也可以根据需要使用.NET MAUI和Windows专用的代码,并且未来有望扩展到CommunityToolkit家族... CommunityToolkit.Blazor?CommunityToolkit.WinForms?谁知道呢!
InfoQ:现在又引入了MAUI Essentials,那么哪些特性将进入社区工具包,哪些特性将进入Essentials,是根据什么策略呢?
Versluis:我们在这方面没有任何官方协议或准则。但是看看Essentials有什么,Toolkit又有什么,它们之间的区别就很明显了。这一切都源于:工具包对Xamarin.Forms有硬性依赖,而Essentials则没有。你可以在Xamarin.Android或Xamarin.iOS项目中使用Essentials的所有API,如果你想那样做的话。它基本上是在原生API上提供了一个抽象层,使它们更偏向于.NET风格。
另外一点就是,工具包有很多的UI特性。无论是XAML支持,还是现有的完备的控件。Essentials没有显示任何UI的特性。至少它们没有自己的用户界面。如果要显示任何UI,那也是来自它所运行的操作系统。Essentials提供的是访问传感器、媒体等与用户界面无关的功能。
不过,也难免会有一个灰色地带,存在一些重叠,但Essentials、.NET MAUI和Toolkit的团队彼此挨得很近,所以我们可以非常快速、非常容易地把事情理清。
InfoQ:将来的话,在.NET MAUI社区工具中实现的所有新特性都会在Xamarin社区工具包中实现吗?
Versluis:如果你的意思是我们是否有计划把新功能从MCT移植回XCT,那么答案将非常简单:不会。如前所述,XCT将与Xamarin.Forms遵循相同的路径。真正的 "开发 "停止了,我们现在专注于修复Bug以及维护,从而保证XCT与Xamarin.Forms以及运行它们的操作系统相兼容,所以,你想用多长时间都可以,但不会有新东西加入了。
所有新开发的内容都将进入.NET MAUI社区工具包。
Gerald Versluis是微软Xamarin.Forms/.NET MAUI团队的一名软件工程师。他有多年使用Azure、ASP.NET、DevOps、Xamarin和其他.NET技术的经验,他参与过许多不同的项目,并一直在构建多个真实世界的应用程序和解决方案。他不仅喜欢写代码,而且还热衷于传播知识——当然,在这个过程中他也有所收获。在业余时间,Gerald会参加演讲,提供(视频)培训课程,撰写博客和文章,在Stack Overflow上回答问题,并为开源项目做贡献。
查看英文原文:Present and Future of Xamarin Community Toolkit: Q&A with Gerald Versluis