2025上半年,最新 AI实践都在这!20+ 应用案例,任听一场议题就值回票价 了解详情
写点什么

Gerald Versluis 访谈:Xamarin 社区工具包的现状和未来

作者:Almir Vuk,Gerald Versluis

  • 2021-10-29
  • 本文字数:3127 字

    阅读完需:约 10 分钟

Gerald Versluis访谈:Xamarin社区工具包的现状和未来

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

2021-10-29 14:5313055

评论

发布
暂无评论
发现更多内容

iOS 单元测试之常用框架 OCMock 详解 | 京东云技术团队

京东科技开发者

ios 测试 单元测试 Mock 企业号 6 月 PK 榜

HTTP请求:requests的进阶使用方法浅析 | 京东云技术团队

京东科技开发者

Python HTTP请求 requests 企业号 6 月 PK 榜

Wallys/board with SFP module /ipq8072/ipq6010/ipq4019 / support openwrt

Cindy-wallys

IPQ4019 IPQ6010 IPQ8072 ipq4029

【6.09-6.16】写作社区优秀技术博文一览

InfoQ写作社区官方

热门活动 优质创作周报

TiDB 7.1 资源管控特性试用

TiDB 社区干货传送门

新版本/特性解读 7.x 实践

「有问必答」Go如何优雅的对时间进行格式化?

王中阳Go

高效工作 学习方法 面试题 Go 语言 6 月 优质更文活动

Wise 的平台工程 KPI 探索之旅

SEAL安全

KPI 平台工程

浅谈中移链中插件的功能及使用

BSN研习社

区块链

HTTP请求:requests模块基础使用必知必会 | 京东云技术团队

京东科技开发者

Python HTTP请求 requests 企业号 6 月 PK 榜

Spring循环依赖案例分析:三级缓存结构+循环依赖解决方案

互联网架构师小马

Java8 Stream 的总体设计和使用

4ye

Java' 6 月 优质更文活动

TiDB v7.1.0版本 相关(部署、在线扩容、数据迁移)测试

TiDB 社区干货传送门

版本测评 新版本/特性发布 扩/缩容 数据库连接 7.x 实践

【TiDB v7.1.0 荣誉体验官招募】索尼 PS5 、索尼无线降噪耳机、倍轻松颈部按摩器等你拿!

TiDB 社区干货传送门

tiflash引擎的使用小总结

TiDB 社区干货传送门

OLAP 场景实践

Python自动化测试的配置层实现方式对标与落地 | 京东云技术团队

京东科技开发者

Python 自动化测试 配置文件 企业号 6 月 PK 榜

CST电磁仿真软件对火箭发射场雷击仿真与电子设备结构设计

思茂信息

cst cst仿真软件 abaqus abaqus软件 abaqus有限元仿真

小程序容器技术:数字门户的创新引擎

FinClip

一篇文章帮你解读所有 TiDB 工具&常见问题解决大全

TiDB 社区干货传送门

直播源码搭建平台技术知识:实时语音识别字幕呈现功能

山东布谷科技

源码 软件开发 源码搭建 直播源码

2023年全国高校公益人工智能师资培训营报名正式开启

飞桨PaddlePaddle

人工智能 百度 飞桨

智造零距离:工程师走访华秋深圳 PCB 工厂,观摩高可靠板制造流程

华秋电子

TiDB v7.1.0 版本 Resource Control体验

TiDB 社区干货传送门

新版本/特性解读 7.x 实践

记一次 Rust 内存泄漏排查之旅 | 经验总结篇

Greptime 格睿科技

rust 时序数据库 内存泄漏 云原生数据库 heap profiling

6 种方式读取 Springboot 的配置,老鸟都这么玩(原理+实战)

程序员小富

springboot

大佬带你深入理解Spring依赖注入原理:bean的注册及实例化

互联网架构师小马

探索开源创新理论|2023开放原子全球开源峰会开源创新理论与实践分论坛成功召开

开放原子开源基金会

开源 开放原子全球开源峰会 开放原子 开源创新理论

深入剖析spring核心容器依赖注入类型和原理:Spring依赖注入类型

互联网架构师小马

全球异型LED显示屏的市场发展

Dylan

技术 设计 领域 LED显示屏 市场

搭建TiDB负载均衡环境-HAproxy+KeepAlived实践

TiDB 社区干货传送门

实践案例 管理与运维 数据库架构设计 7.x 实践

搭建TiDB负载均衡环境-LVS+KeepAlived实践

TiDB 社区干货传送门

管理与运维 7.x 实践

TiDB Contributor 资料汇总

TiDB 社区干货传送门

Gerald Versluis访谈:Xamarin社区工具包的现状和未来_语言 & 开发_InfoQ精选文章