Active Record?
소규모 앱에서 단순하게 사용할 수 있도록 도와줌
import { BaseEntity, Entity, PrimaryGeneratedColumn, Column } from "typeorm"
@Entity()
export class User extends BaseEntity {
@PrimaryGeneratedColumn()
id: number
@Column()
firstName: string
@Column()
lastName: string
@Column()
isActive: boolean
}
// example how to save AR entity
const user = new User()
user.firstName = "Timber"
user.lastName = "Saw"
user.isActive = true
await user.save()
// example how to remove AR entity
await user.remove()
// example how to load AR entities
const users = await User.find({ skip: 2, take: 5 })
const newUsers = await User.findBy({ isActive: true })
const timber = await User.findOneBy({ firstName: "Timber", lastName: "Saw" })
Data Mapper?
유지 관리하는걸 도와주고 대규모 앱에서 유용
import { Entity, PrimaryGeneratedColumn, Column } from "typeorm"
@Entity()
export class User {
@PrimaryGeneratedColumn()
id: number
@Column()
firstName: string
@Column()
lastName: string
@Column()
isActive: boolean
}
const userRepository = dataSource.getRepository(User)
// example how to save DM entity
const user = new User()
user.firstName = "Timber"
user.lastName = "Saw"
user.isActive = true
await userRepository.save(user)
// example how to remove DM entity
await userRepository.remove(user)
// example how to load DM entities
const users = await userRepository.find({ skip: 2, take: 5 })
const newUsers = await userRepository.findBy({ isActive: true })
const timber = await userRepository.findOneBy({
firstName: "Timber",
lastName: "Saw",
})
위의 예시를 보았을 때, 두가지 방식의 차이는 extends를 붙여주냐 안 붙여주냐의 차이로
가독성 좋게 User로 불러오냐, userRepository로 불러오냐의 차이인 듯하다.
어떤 방식을 사용하냐의 차이는 개발자 본인이 정하여 사용하면 되는 것이지만,
NestJS+TypeORM 개발 환경에서는 NestJS에서는 Repository를 사용하기 편리한 기능이 탑재되어있고, Repository를 통해 실제로 구현하는 서비스에 접근이 가능하고 테스팅할 때도 접근이 가능하기 때문에 이번 프로젝트에선 DataMapper를 사용한다.
https://typeorm.io/active-record-data-mapper