Flutter 最佳实践篇之写出短小的 switch

OldBird

实用Tips|2025-1-22|最后更新: 2025-1-22|
type
status
date
slug
summary
tags
category
icon
password
在 Flutter 开发中,switch 语句是控制逻辑中常用的工具。它直观易读,适合处理多种分支逻辑。然而,随着代码复杂度增加,switch 很容易变得冗长难以维护。那么,如何在 Flutter 中写出简洁且高效的 switch 语句呢?本文将分享一些最佳实践,让你的代码更简洁、更优雅。

Switch 天生要做 N 件事

假设我们需要根据用户角色执行不同的权限操作。如果直接使用 switch,代码可能如下:
这种实现有以下问题:
  1. 职责分散switch 的逻辑可能会出现在多个地方,导致重复代码。
  1. 难以扩展:新增角色时需要修改每个包含 switch 的地方,违背开闭原则(OCP)。
我们无法避开 switch 语句,不过还是能够确保每个 switch 都埋藏在较低的抽象层级,而且永远不重复。
该问题的解决具体方案是:将 switch 语句埋到抽象工厂底下,不让任何人看到。

使用依赖倒转优化

我们可以通过抽象接口隐藏switch,并让高层模块依赖抽象。
优化的实现:
  1. 定义抽象行为:
    1. 为每个角色创建具体实现:
      1. 使用工厂类隐藏 switch
        1. 在高层模块中调用

          优化后的优势

          • 隐藏 switch:
            • switch 被封装在工厂类中,不会在高层模块中重复出现。
          • 提高扩展性:
            • 如果新增角色,只需添加对应的 RoleHandler 实现类,并在工厂类中添加逻辑,高层模块无需修改。
          • 遵循单一职责:
            • 每个角色的逻辑独立封装,不会混杂在一起,代码更清晰。

          进一步优化:动态注册处理器,完全剔除 switch

          如果角色较多,可以通过动态注册的方式进一步简化工厂类。
          1. 定义一个注册表:
            1. 注册处理器:
              1. 修改高层模块调用:

                总结

                通过依赖倒转原则,我们可以将 switch 的逻辑隐藏在较低层级,并通过抽象接口和工厂类实现更灵活、可扩展的代码。
                在实际开发中,这种设计模式可以应用于权限管理、消息分发、事件处理等多个场景,帮助开发者编写更加优雅、易维护的代码。
                Loading...