聚焦开源:.NET 项目及其背后的工具
JetBrains 始终乐于见证开发者社区的成长与蓬勃发展。正因如此,我们鼎力支持那些真正带来积极影响的开源项目 – 这些项目帮助开发者相互学习、携手构建,共同打造更优质的软件。对于能向开源维护者提供免费许可证,并为赋能生态系统及其支持人群的相关举措贡献力量,我们倍感自豪。
在本期聚焦开源博文系列中,我们将重点介绍 .NET 生态系统中的四个项目 – 每个项目都很好地印证了开发者体验是宏大项目得以长期可持续发展的关键这一道理。
Avalonia UI:跨平台 .NET UI 工具包
Avalonia 是用于构建 .NET 应用程序的开源、跨平台 UI 框架。该项目于 2013 年启动,初衷是将 WPF 作为开源项目重新实现,此后稳步发展。团队表示,项目从 2021 年开始受到广泛关注,此后采用率显著增长。
我们的贡献者在所有受支持的桌面平台进行开发:有人全职负责 macOS,有人负责 Linux,还有人专注于 Windows。唯一一款能在所有这些平台上运行的 IDE 就是 JetBrains Rider。更加分的是,Rider 还拥有目前市面上最出色的 Avalonia XAML 支持。
Steven Kirk,Avalonia 创作者
后续计划:团队的目标是持续推动 Avalonia 成为“领先的 .NET UI 工具包”。团队近期发布了 Avalonia Accelerate,并制定了分阶段推出计划 – 第一阶段包括推出新的开发者工具、媒体播放器和原生 WebView 控件。后续阶段将包括推出打包工具、GUI 设计器等。团队还在开发 v12,预计未来几个月将有更多消息公布。
MudBlazor:.NET 优先的 Blazor 组件库
MudBlazor 的出现源于其创始人在参与其他 Blazor 组件库的开发工作时遇到了架构局限和稳定性问题 – 编码过程如同与隐藏的 JavaScript 逻辑作斗争,且缺乏全面的单元测试覆盖。
创作者们决心打造一款对开发者友好的 .NET 组件库,绝大多数功能都使用 C# 编写,仅在绝对必要时才使用 JavaScript。他们最终得到了一个测试覆盖率达到 90%、稳定可靠、经过充分测试、易于调试的组件库。
ReSharper 在发现 MudBlazor 问题这一方面发挥了巨大作用:它能发现 NullReferenceException、未使用的值、始终为 null 的表达式等问题。我重度依赖单元测试资源管理器和本地化管理器。
此外,dotMemory 和 dotPeek 对我们来说是非常宝贵的工具,尤其是在用户报告性能问题或内存使用量大的棘手情况下。这些工具在改进我们之前存在问题的弹出系统的性能方面发挥了巨大的作用。
Artyom Melnikov,MudBlazor 维护者
对我个人而言,ReSharper 及其包含的测试运行程序是 MudBlazor 开发最为重要的工具。它可以自动添加用法、建议代码简化、高亮显示未使用的代码、标记潜在错误,因此可以大大提升工作效率。我经常用它重构整个文件或项目。我最喜欢的按键组合是 Ctrl+T,它能让你跳转到某个类型。在像 MudBlazor 这样庞大的源代码库中,这节省了大量时间。
此外,dotCover 也在我们提升测试覆盖率的过程中发挥了巨大作用。我用它来发现未测试的代码区域,并快速有效地统计方法、类或整个模块的覆盖率。
Meinrad Recheis,MudBlazor 联合创作者
后续计划:团队对 MudBlazor 的评价是“非常成熟”,并强调要控制复杂度,确保该组件库能由一个小团队维护。他们预计未来将进行大量重构工作以解决内部设计问题 – 并表示得益于 ReSharper 和高测试覆盖率,他们可以安全地进行这些工作。
LINQ to DB:基于 LINQ 的数据访问库
LINQ to DB 最早的代码可以追溯到 2002 年。它最初是一个简单的对象映射器,后来发展为一个名为 BLToolkit 的库。在 .NET 中引入 LINQ 支持后,该团队构建了一个自定义 LINQ 提供程序,并在 2012 年重新设计了方式,将与 LINQ 相关的部分提取到一个独立库中,这个库就是 LINQ to DB,它现在已成为一个成熟的高性能数据访问库。
JetBrains IDE 在我们的日常工作流中发挥着至关重要的作用。Rider 和 ReSharper 帮助我们确保庞大、复杂代码库的整洁性与一致性。它们的静态分析、代码检查和导航功能可以轻松地提前发现问题并安全重构。它们在处理复杂的表达式树转换和查询生成逻辑时尤其好用。
DataGrip 是我们在开发和调试期间与数据库进行交互的首选工具。它支持多种 RDBMS,并具备丰富的 SQL 功能,这与 LINQ to DB 的多数据库特性完美契合,从而使测试和验证更加顺畅。
对于测试与性能方面,我们依赖于 dotCover 确保单元测试全面覆盖边界情况和表达式场景。dotMemory 帮助我们检测并修正内存泄漏和低效问题,这对长时间运行的数据操作尤为重要。dotTrace 在将 LINQ to DB 打造成如今的高性能库方面发挥了关键作用。没有它,我们根本无法将表达式转换流水线和查询执行路径优化成现在的水平。
Igor Tkachev,LINQ to DB 创作者
后续计划:团队正在优化表达式树转换引擎,以支持更高级的 LINQ 构造和自定义表达式。更完善的诊断功能、更深入的基于 Roslyn 的源代码生成,以及一致性更高的跨数据库行为也已纳入路线图。团队的长期目标是与现代 .NET 功能进行更紧密的集成,并在不牺牲性能的情况下,提高在异步和高吞吐量场景中的实用性。
PeachPie:适用于 .NET 的 PHP 编译器
PeachPie(原名 Phalanger)作为一个实验性项目于近 20 年前启动,其目标是将 PHP 转换为通用中间语言,并在 .NET 运行环境中运行,以期通过这种方式提升性能和安全性。如今,该团队指出,人们将 PeachPie 用于 PHP 和 C# 的混合应用开发,包括单个项目中前端使用 WordPress、后端使用 C# 的场景。
我们正在试验 Rider,尝试在 IDE 中支持 PeachPie PHP/.NET 应用程序,提供 IntelliSense、设计时分析、通过 CLR 调试器进行调试等功能。
Jakub Míšek,PeachPie 创作者
后续计划:后续开发工作将侧重于重大里程碑,例如让 Laravel 或 Symfony 在 .NET 上运行,这一目标将通过同步完成所需的次要功能、库开发和 bug 修正来支持。
在我们看来,这些故事最令人鼓舞的共性,就是可维护性在很大程度上取决于开发者的日常工作体验:更安全的重构、强大的诊断功能、快速导航以及帮助团队自信地验证更改的工具。
如果您正在使用这些项目中的任何一个,请考虑分享反馈、提交问题或贡献一个小改进 — Rider 对开源开发免费,并随时准备帮助您完成编码、协作和贡献。
本博文英文原作者: