用途
该技能面向在 Angular 20 应用中集成 @angular/fire(20+ 版本)的开发场景,目标是在无 Zone(Zoneless)、Signal 优先、符合 DDD(领域驱动设计)架构的项目中,提供可复用的实现模式与代码范式。它强调将 Firebase 作为基础设施层实现,避免 Firebase 细节渗透到领域层与 UI 层。
主要能力
-
仓储实现(基础设施层):演示如何用 Firestore 与 Signals 实现领域仓储。示例中通过 inject(Firestore) 注入实例,使用 collection、collectionData、query、where、doc、setDoc 等 API;查询方法返回 Observable(作为基础设施标准),并使用 collectionData 的 idField 选项;保存方法使用 setDoc 写入文档。
-
基于 Signal 的认证状态(账户模块):演示构建 Auth Store 的标准模式。使用 @ngrx/signals 的 signalStore、withComputed,通过 inject(Auth) 获取认证实例,用 toSignal 将 Firebase 的 user(auth) 流转换为 Signal,并派生出 user、isAuthenticated、userId 等计算属性。
-
错误映射:强调 Firebase 错误不应直接到达领域层或 UI。示例中将 signInWithEmailAndPassword 抛出的错误按 error.code 映射为领域错误(如 auth/wrong-password 映射为 InvalidCredentialsError),其余映射为 InfrastructureError。
-
安全规则检查清单:要求所有工作区数据满足 request.auth != null;用户只能读取自己所属的工作区;使用 get(/databases/(default)/documents/workspaces/$(workspaceId)).data.members 进行权限检查;禁止使用 allow read, write: if true;,即使在开发环境也不允许。
-
优化模式:无 Zone 安全——确保所有 Firestore 交互都包裹在 Angular Signals 中,避免变更检测遗漏;快照转换——转换为领域实体时始终将 Timestamp 对象映射为数字(毫秒);批处理——多次更新使用 writeBatch() 以保持原子性并节省成本。
使用方式
该技能以代码模式与检查清单形式提供,可直接参考其中的 TypeScript 示例进行实现。示例文件路径包括 src/app/integration/persistence/task-firestore.repository.ts 与 src/app/account/application/stores/auth.store.ts。具体安装命令、依赖版本约束及完整配置步骤暂未提供。
适用场景
适用于使用 Angular 20、采用 Zoneless 与 Signal 优先策略、并按 DDD 分层组织代码的项目;需要在基础设施层接入 Firestore 与 Firebase Auth,同时保持领域层纯净、错误语义统一的团队。
限制
资料未提供安装命令、依赖清单、完整配置步骤、收费或价格信息、平台支持范围及实际效果数据,这些内容暂未提供。