3.4 KiB
3.4 KiB
Conventions(编码规范)
ArkTS(TypeScript 的超集,HarmonyOS 严格类型方言)+ ArkUI 声明式 UI。
命名 Naming
| 元素 Element | 规则 Rule | 示例 Example |
|---|---|---|
| 组件 / Ability | PascalCase |
LoginPage, EntryAbility |
| 文件 | 与组件同名 .ets |
LoginPage.ets |
| 变量 / 函数 / 属性 | camelCase |
userName, fetchData() |
| 常量 | UPPER_SNAKE_CASE |
MAX_RETRY_COUNT |
| 布尔变量 | is/has/can 前缀 |
isLoading, hasError |
严格类型 Strict Typing
- 禁止
any、@ts-ignore、@ts-expect-error。 - 类型搞不定 = 设计有问题,重构类型而不是绕过它。
- 优先
interface/enum,复杂类型放model/。
声明式 UI 与状态 Declarative UI & State
- UI 由状态驱动:改状态 → 自动重渲染,禁止命令式直接改 UI。
- 状态管理全量使用 StateManagement V2(禁用 V1 装饰器):
- 组件/页面
@ComponentV2 - 局部状态
@Local - 父子传递
@Param(单向输入)/@Event(子→父回调,不用@Link) - 类可观察
@ObservedV2+@Trace(字段级精准刷新) - 跨层共享
@Provider/@Consumer;变化监听@Monitor - 全局/持久化
AppStorageV2/PersistenceV2
- 组件/页面
- 避免不必要的重渲染:
@Trace字段粒度要细,不要一个大对象整体刷新。
资源 Resources
- 颜色 / 间距 / 字号统一走
uikit/theme/Theme.ets的 token(AppColor/AppSpacing/AppFontSize),禁止在组件里散落颜色/尺寸魔法值。 - 用户可见文案:优先
$r('app.string.xxx')(便于国际化);临时/演示文案可内联,正式功能应收口到资源。 - 图片/图标等媒体:
$r('app.media.xxx')。
组件化 Components
- 页面:
@Entry @ComponentV2,放pages/,仅编排(组合 view + viewmodel,不含业务逻辑)。 - 业务复用组件:
@ComponentV2,放view/,通过@Param(输入)/@Event(回调)与外界通信,不直接依赖业务层。 - 跨模块通用组件:下沉到
uikit/(uikit/src/main/ets/components/)。 - 长列表复用用
@Reusable。
分层与依赖方向 Layering
pages → viewmodel → data(repository/api) → model。禁止反向依赖(如 model import repository)。
viewmodel只依赖data/repository的抽象契约;repository实现依赖data/api+common网络层。- 跨模块依赖:
entry → common / uikit;common、uikit相互独立,禁止反向/循环依赖。 架构越界由约定 + 人工审查把关(ArkTS 侧暂无现成的依赖方向 linter)。
安全 Security
code-linter.json5 已启用 @security/* 规则,改动不得引入不安全算法:
- 禁用不安全哈希(MD5/SHA1)、不安全 AES 模式、3DES、弱 RSA/DH 密钥等。
- 需要加密时优先系统安全 API(如
@ohos.security.cryptoFramework的安全模式)。
性能 Performance
code-linter.json5 已启用 @performance/recommended:
- 长列表用
LazyForEach+@Reusable,不要ForEach渲染大量节点。 - 避免在
build()里做重计算/创建新对象。 - 大图/列表项懒加载,图片用合适的缓存策略。
改动后验证 Verify After Change
- 跑 lint:DevEco 里 Code Linter,或 hvigor 对应任务。
- 跑相关测试:见
docs/testing.md。 - 提交前确认
code-linter.json5无新增 error。