用途:为 Dart/Flutter 代码提供统一的命名规范,使名称可搜索、可自解释,并让审查、grep 或导入门禁仅凭名称即可判断类型所处层级。规范的“是什么”以 Effective Dart 为准,本技能是其落地做法,不得自创与语言官方风格冲突的规则。
主要能力(不可协商的规则):类型(类、枚举、mixin、扩展、typedef、类型参数)用 UpperCamelCase;成员、变量、函数、参数用 lowerCamelCase;常量用 lowerCamelCase,不用 SCREAMING_CAPS;文件、目录、库与 import 前缀用 lowercase_with_underscores。文件名应等于其主要声明的 snake_case,每个文件一个主要公开类型,禁止 utils.dart/helpers.dart/models.dart 这类杂物文件或杂物目录。超过两个字母的缩写按单词大小写(Json、Http、Url、Api),两字母缩写可作为类型保留大写(ID、UI)。前导下划线表示库私有,仅确实需要私有时使用。禁止匈牙利式/类型编码命名,禁止把类型写进名字(如 userMap、nameString)。布尔值读作断言(isLoading、hasError、canSubmit、shouldRetry),布尔 getter/方法以 is/has/can/should 开头;不使用 get 前缀访问器;函数用动词短语,非布尔 getter 用名词短语。业务名称需含单位与语义(如 maxItemsPerPage、retryDelaySeconds、orderTotalMinorUnits)。import 按 dart: / package: / relative 分组并各自字母排序,交由 dart format 与 directives_ordering 执行。
角色后缀即层级契约:屏幕用 [Feature]Screen;可复用组件用 [Thing];ViewModel(Riverpod 默认)用 [Feature]Notifier;数据层接口用 [Entity]Repository,实现用 Drift[Entity]Repository/Remote[Entity]Repository;Drift DAO 用 [Entity]Dao;自定的能力接口用 [Concern]Service,其实现放在组合根(如 FirebaseAnalyticsService);对外部插件/SDK/原生通道的薄封装用 [Concern]Gateway(如 NotificationGateway),实现为 FlnNotificationGateway;纯 Dart 领域逻辑用 [Domain] + Calculator/Validator/Formatter 等动词后缀;不可变模型用领域名词无后缀;失败类型用 [Domain]Failure。Riverpod 路径上的 ViewModel 只能是 Notifier/AsyncNotifier/StreamNotifier,命名 [Feature]Notifier;[Feature]ViewModel 仅限 Provider/ChangeNotifier 附录。
重要区分:Service 是你自己定义的能力接口,Gateway 是对特定外部 SDK 的薄封装;二者的具体实现只应出现在组合根,若实现名泄漏到共享/领域代码即为可 grep 的坏味道。
限制与适用:资料未提供版本兼容范围、安装命令、收费或平台信息。该技能面向 Dart/Flutter 项目,需配合 dart format 与 dart analyze --fatal-infos 使用;其规范性依据为 Effective Dart 与 Dart linter(constant_identifier_names、camel_case_types、file_names、directives_ordering、non_constant_identifier_names)。