TypeORM 的 Active Record 和 Data Mapper 模式区别:
Active Record 模式:
- 实体类直接包含数据访问逻辑
- 使用 extends BaseEntity 或使用 @Entity() 装饰器
- 示例:
typescript
@Entity() export class User extends BaseEntity { @PrimaryGeneratedColumn() id: number; static async findByName(name: string) { return this.createQueryBuilder('user') .where('user.name = :name', { name }) .getMany(); } } // 使用 const user = new User(); user.name = 'John'; await user.save();
Data Mapper 模式:
- 实体类只包含数据,不包含数据访问逻辑
- 使用 Repository 进行数据操作
- 示例:
typescript
@Entity() export class User { @PrimaryGeneratedColumn() id: number; } // 使用 const userRepository = dataSource.getRepository(User); const user = new User(); user.name = 'John'; await userRepository.save(user);
选择建议:
- Active Record:适合小型项目、快速开发
- Data Mapper:适合大型项目、更好的关注点分离和可测试性