乐闻世界logo
搜索文章和话题

TypeORM 的 Active Record 和 Data Mapper 模式有什么区别?

2月17日 22:44

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:适合大型项目、更好的关注点分离和可测试性
标签:TypeORM