Difference between TypeORM's Active Record and Data Mapper patterns:
Active Record Pattern:
- Entity classes directly contain data access logic
- Use extends BaseEntity or @Entity() decorator
- Example:
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(); } } // Usage const user = new User(); user.name = 'John'; await user.save();
Data Mapper Pattern:
- Entity classes only contain data, no data access logic
- Use Repository for data operations
- Example:
typescript
@Entity() export class User { @PrimaryGeneratedColumn() id: number; } // Usage const userRepository = dataSource.getRepository(User); const user = new User(); user.name = 'John'; await userRepository.save(user);
Recommendations:
- Active Record: Suitable for small projects, rapid development
- Data Mapper: Suitable for large projects, better separation of concerns and testability