Doggie Bus: 一个开发人员如何使用 .NET MAUI 和 Azure 构建“狗狗版优步”
Doggie Bus 是 Troy Bergeron 在新奥尔良创建的一家初创公司,提供独特的“狗狗版优步”服务 - 这是一块移动应用,支持宠物主人为狗狗安排快捷安全的出行服务,以前往日托中心、兽医诊所等。Troy 毕生热爱狗狗,他亲自驾驶 Doggie Bus 接送车,把每只小狗都当做家人一样关爱。他的目标是让宠物接送变得像叫网约车一样简单和可靠,让主人安心无忧。
为了将这一愿景变为现实,Troy 与 Mario DeLuca (Deluca Technologies)开展合作,后者是一名经验丰富的软件工程师,也是 .NET MAUI (在此之前是 Xamarin)的早期采用者。他们携手打造了一款跨平台移动应用,其体验可媲美顶尖网约车体验,但专为宠物主人量身定制。



真实的人,真正的激情
2024 年初,Doggie Bus 在 iOS 和 Android 上推出,为宠物主人安排出行提供了便利。Troy 个人对宠物安全的承诺是服务的核心所在。他会与每一位新客户(主人和狗狗)见面,并通过透明度建立信任: 主人可以在地图上实时追踪 Doggie Bus 的位置,还能在每次接送时收到通知。
宠物主人往往和任何父母一样爱护孩子,他们喜欢这种可见性。这款应用让他们安心无忧,因为可以随时知晓自己的“毛孩子”的位置,还知道它们正被悉心照料。
在技术端,Mario 是幕后英雄。作为一名长期的 C# 开发人员,他很高兴将 .NET 端到端用于 Doggie Bus。这让他能够独自在两个平台上打造出精致的原生移动体验。两人的合作天衣无缝:作为应用的第一个用户(通过管理员模式运营日常路线),Troy 提供了深刻的行业见解和持续反馈,Mario 则快速迭代功能。两人都受这样一个使命驱动:即让这项服务“简单到连狗都能操作”,正如 Troy 常打趣说的那样。
我们的服务应该简单到连狗都能操作”
协同使用效果更佳 - 使用 .NET MAUI 解决它
挑战: Doggie Bus 需要在两个平台上提供高质量的移动应用,同时避免付出双倍努力。他们还需要实时通信(用于实时行程跟踪),以及简洁直观、用户友好的界面,以便用户安心。作为小型初创企业,他们必须在有限的时间和预算内实现所有这些目标。
.NET 解决方案: Mario 为移动应用选择了 .NET MAUI,这让他可以通过单个 C# 代码库面向 iOS 和 Android。这一决定立即将开发时间和成本削减了一半,因为一个代码库可生成两个本机应用。“借助 .NET MAUI,我们能够在跨平台共享超过 90% 的代码。借助这种效率,我们可以更快地移动、减少维护开销,并在 iOS 和 Android 上提供一致的体验。”Mario 补充道。.NET MAUI 框架提供了所需的本机性能和灵活性,而无需组建大型团队。解决方案的关键方面包括:
- 统一的应用代码库: 约 90% 的 Doggie Bus 应用代码是跨平台共享的。核心功能(UI 布局、乘车逻辑、数据模型)只需使用 .NET 编写一次,即可在 iOS 和 Android 上本机运行。仅几个部件需要进行特定于平台的调整(例如,每个操作系统上可以顺利地对小巴士图标进行动画处理的每自定义地图呈现器)。这种基于单代码库的方法可确保实现功能奇偶一致性和简化的维护。
- Azure 支持的后端: 团队使用 ASP.NET Core 和 Azure 构建了一个云后端,用于处理身份验证、计划和数据存储。使用 Azure SignalR,该应用可实现实时更新: 当 Troy 驾驶时,会将该车的 GPS 位置发送到云,并立即推送到宠物主人的手机,以便其在地图上实时观看车辆的移动情况。所有数据(计划、宠物档案、疫苗记录)均通过实体框架存储在 Azure SQL 数据库中。后端还与 Apple 和 Google 集成,以实现轻松登录。从第一天开始,此端到端 Microsoft 堆栈(MAUI 应用 + Azure 服务)即可确保实现确保可靠性和可伸缩性。
- 新式开发工具和库: Mario 利用了丰富的 .NET 生态系统来加速开发。他使用了 .NET MAUI 社区工具包来获取现成可用的 UI 组件和效果,并利用开发源代码库来实现身份验证流等功能。利用 XAML 热重载等生产力功能,可以进行快速 UI 调整,GitHub Copilot 则充当 AI 编程搭档,可生成样板代码并加快开发速度。结果: 与传统的多团队开发相比,Doggie Bus 只需极短时间即可将概念转变为功能丰富的精美应用。
为什么使用 .NET MAUI?除了跨平台效率以外,性能和统一的生态系统也是 Doggie Bus 选择 .NET 的原因。该应用采用提前(AOT)编译,即便使用较旧的 Android 手机,也可以实现“丝滑流畅”的性能。通过同时在客户端和服务器上使用 C#,团队可在整个项目中共享代码和技能。例如,只需定义一次数据模型,即可在两端重用,从而减少了 bug 和不匹配问题。
Mario 短暂考虑过其他框架,但由于曾经使用 Xamarin 交付过成功的应用,他相信 .NET MAUI 可以提供本机质量级别的成果。“在我看来,选择 MAUI 是理所当然的事,”他在谈及选择 MAUI 时说道。这种统一的方法省去了招聘单独的 iOS/Android 开发人员以及学习新语言的麻烦 - 这对小公司而言是一个巨大的优势。借助 .NET 的灵活性和库,甚至顺利地解决了实现实时地图和社交登录等挑战。
每当遇到难题(如微调动态地图标记的动画效果)时,都可以通过 .NET 实现自定义解决方案,而不会陷入绝境。简而言之,.NET 在一个平台上提供了所需的一切,加快了 Doggie Bus 团队的开发速度,降低了开发成本,并带来更多乐趣。
.NET MAUI 帮助我们将开发成本降低了 50% 以上。使用单个代码库和共享后端逻辑,我们为 iOS 和 Android 提供了高性能的本机应用 - 但并未投入双倍的工作”
影响与未来之路
快乐的宠物主人: 自发布以来,Doggie Bus 已经改变了客户管理宠物运输的方式。现在,只需几秒钟即可使用应用预订形成,取代了以往的电话或短信方式。只需点击几下,宠物主人即可安排接送 - 无需处理任何文档或来回沟通。应用会在车辆即将到达、宠物已被接走、完成送达等关键时刻发送自动通知,免除宠物主人的担忧或牵挂。
他们特别喜欢实时跟踪功能:实时观看 Dogie Bus 的图标在地图上移动,既让人安心又非常有趣。Troy 指出,“我收到很多对于通知功能的赞扬,”并且许多用户告诉他这项服务非常容易使用。这种便捷性和透明度推动了当地宠物主人广泛采用此项服务。如今,许多客户每周都会在日常安排中多次预订 Doggie Bus 出行,因为他们相信这对自己的狗狗来说既可靠又安全。
在 Troy 的运营方面,.NET 解决方案带来了立竿见影的改进。所有计划和记录保留均实现了 100% 的数字化 - 正如 Troy 所说,“所有内容都保存在一个应用里,无需进行任何纸质记录”。不再需要剪贴板或手动日志;借助应用的管理员功能,他可以管理每天的路线、查看狗狗档案和疫苗记录,以及处理付款,一切都在一个位置完成。
这简化了运营,并减少了失误。Troy 可以专注于照顾狗狗,而非处理文书工作。在财务方面,使用 .NET 为公司节省了大量开发成本。构建单独的本机应用原本需要两个开发人员或采用代价高昂的外包,这对公司而言难以承受。相反,一个开发人员提供了整个产品。
根据 Mario 的估算,选择 .NET MAUI“大幅降低了开发成本,”,这一点对 Doggie Bus 的推出至关重要。尽管预算有限,但与规模大得多的竞争对手相比,最终应用仍实现了精良的专业级品质。技术选择还简化了将来的维护工作:新功能只需添加一次,即可同时显示在两个平台上,从而保持较低的持续成本。
凭借坚实的技术基础,Doggie Bus 已做好纵向扩展的准备。基于 Azure 的云原生架构可轻松支持更多车辆或新增区域,这与 Troy 实现连锁加盟服务的计划相契合。团队已在探索向其他城市扩张,因为他们知道,只需稍作改动,即可扩展相同的应用和后端。他们还计划搭建用于预订的 Web 门户(可能使用 Blazor WebAssembly 开发),并且可将大部分现有.NET 代码重用于该门户。扩展是 .NET 的固有特征,而不是事后想法 - 该平台的多功能性意味着移动、Web 和将来的平台都可以共享一个代码库和技能集。
在回顾到目前为止的历程时,Troy 和 Mario 强调了 .NET 如何支持他们将想法变为现实。Troy 对让 Doggie Bus 得以问世的技术和人才深表感激,他说,“Mario 让我实现了我的梦想。”Mario 则称赞了这些工具:“.NET 可以让梦想成为现实,”并提到借助这个平台,小型团队也可以交付超出最初预期的应用。Mario 继续说到:“这不仅仅是一个移动应用,它是一个可缩放的云连接平台,专为实现增长而构建。借助 .NET MAUI 和 Azure,我们打造了面向未来的基础,它精简、高效,且专为实现增长而设计。”Doggie Bus 的成功 - 快乐的宠物主人、快速发展的企业,以及实现增长的基础 - 就是一个明证。借助 .NET 的强大功能,这款“狗狗版优步”正信心满满地上路,而旅程才刚刚开始。
借助 .NET 和 Microsoft,你不只是在生成软件 - 而且是在将愿景转化为实际可用的解决方案。这里就是梦想照进现实的地方。”
准备好开始使用了吗?
分步教程将帮助你在计算机上运行 .NET MAUI。