SuperAPI AI 工具集

drupal-brainstorming

编程与开发

查看项目

更新于 10-20 17:12

技能介绍

用途

本技能面向 Drupal 功能开发前期的设计与思考阶段,目标是:在写代码前完成结构化探索,避免 Drupal 开发中最昂贵的错误,例如实体类型选错、测试类型选错、缺少访问控制或引入不必要的复杂度。

何时使用

  • 开始一个新功能或新模块
  • 为现有代码添加较重要功能
  • 不确定该用内容实体、配置实体,还是都不需要
  • 在 hook、事件或插件之间做选择
  • 多模块改动,影响范围不清楚

四步流程(约 5 分钟)

第一步:明确意图

先问自己(或用户)几个问题:

  • 这解决什么问题(而不是要写什么代码)
  • 谁使用它(管理员、已认证用户、匿名用户、API 消费者、cron)
  • 已经存在什么?运行 discover deps:MODULE 或检查结构索引
  • 能工作的最简单版本是什么

不要跳过这一步。最常见的失败模式是把错误的东西正确地建出来。

第二步:实体与数据设计

Drupal 早期最具影响的决策是数据如何存储:

  • 数据带修订、访问控制、字段、视图 → 内容实体
  • 站点配置(设置、映射)→ 配置实体
  • 临时或计算型数据(缓存、队列、状态)→ 不用实体,使用 State API、Queue 或 cache
  • 简单键值对 → \Drupal::state() 或 config

常见陷阱:在配置实体或 State API 就足够时创建内容实体。内容实体成本较高(数据库表、访问处理器、视图集成),只有在需要完整实体生命周期时才使用。

第三步:架构草图

为每个组件做决定:

  • 业务逻辑:服务类,始终是服务,不放在控制器或 hook 中
  • 数据访问:Entity API,绝不用原生 SQL
  • 用户交互:Form API 加控制器;变更用表单,展示用控制器
  • 后台工作:Queue 加 AdvancedQueue,不用 cron hook
  • 外部调用:通过依赖注入使用 Guzzle,绝不用 file_get_contents
  • 事件:EventSubscriber,跨模块关注点优先用事件而非 hook
  • 展示:Twig 加预处理,重逻辑放在预处理中而非 Twig

影响范围检查:多模块改动前,运行 discover deps:FEATURE 查看依赖关系。

第四步:决策记录

用 3-5 行记录决策,例如:

  • 实体:配置实体(仅设置,无需修订)
  • 服务:my_module.processor(业务逻辑)、my_module.client(外部 API)
  • Hook:hook_cron 用于定时检查,使用 #[Hook] 属性风格
  • 访问:自定义权限 administer my_module
  • 测试:服务用 Kernel 测试,管理员表单用 Functional 测试

该记录可作为编写计划或直接实现的输入。

反模式

  • 先建后理解:用写代码来“探索”,而不是阅读现有代码
  • 实体泛滥:为本应是配置或状态的数据创建实体
  • 上帝服务:一个服务做所有事,应按职责拆分
  • 过早抽象:为只有一个实现的东西创建接口、插件和工厂
  • 忽视现有模块:自建前检查 contrib 是否已解决

输出

思考结束后应有:

  • 清晰的问题陈述(1-2 句)
  • 实体与数据设计决策及理由
  • 服务架构草图(哪些服务、各自做什么)
  • Hook 与事件策略
  • 测试策略(用哪种测试类型、测什么)

可交给 writing-plans 做详细实现计划,或交给 @drupal-builder 直接实现。

限制与暂未提供的信息

资料未提供安装方式、运行环境要求、收费与授权信息,以上内容暂未提供。