SuperAPI AI 工具集

symfony-yoandev-architecture

通用与其它

查看项目

更新于 10-16 05:42

技能介绍

用途:为 Symfony 项目规定代码应放在哪一层、边界如何划分,核心原则是“实体不持有规则,服务持有全部规则”,其余约定多由此推导。

主要能力:给出五层契约——Controller 只读请求、调用一个服务、选择表示,不得含业务规则、EntityManager、DQL、flush();Service 承载全部业务规则、编排与 flush(),不得构建查询、感知 HTTP、向外返回实体;Repository 负责 DQL、QueryBuilder、SQL、persist()、remove(),不含业务规则与 flush();DTO 跨边界传数据并承载校验约束,不依赖 Doctrine;Entity 只保存映射状态、getter/setter 与值常量,不含不变量或领域方法。

使用方式:服务用 final readonly 与构造器注入,按职责命名(如 BookRater),每个用例调用一次 flush(),只接收标识符并自行加载实体,对外返回 Output DTO。业务失败在 src/Exception/ 定义具名异常,用 #[WithHttpStatus]、#[WithLogLevel] 标注 HTTP 状态与日志级别;注意异常已实现 HttpExceptionInterface 时属性被忽略,且 framework.exceptions 配置优先于属性。服务完成后直接调用协作者,而非派发领域事件;#[AsEventListener] 仅用于框架事件。配置按“是否随机器/环境变化”选择 env var、app. 前缀参数或类常量,用 #[Autowire] 注入且只能指定一个来源。

适用场景与限制:适合需要统一分层、便于评审与机械校验的 Symfony 项目;deptrac 配置由 symfony-yoandev-quality 提供。贫血实体意味着 setter 不强制任何规则,保证依赖所有写入路径都经过服务;EasyAdmin 等可信界面不应用规则,必要时在实体上以 #[Assert] 复制本地规则。ObjectMapperInterface 属 symfony/object-mapper,7.3 实验、7.4 稳定、6.4 缺失,缺失时改用 Output DTO 的静态 fromEntity()。Voter 属授权而非架构,归 symfony-yoandev-security。其余细节暂未提供。