Nest.jsでDDDを行う
Nest.js
アーキテクチャ
DDD
Clean Architecture
バックエンド
知識
判断
Nest.jsでDDDを実現するために、以下方針で進めた。 ディレクトリ構成は、よくある構成のため割愛(ほぼこの構成)
- 基本app.module.tsというファイルで一元管理して、DIコンテナとして運用する
- databaseの設定に関してはmoduleとして定義し、app.moduleでimportする
- テスト用のmoduleは別で定義し、テスト用のDBに接続などする
例
ts
@Module({
imports: [
DBModule,
PassportModule.register({ defaultStrategy: 'jwt' }),
],
controllers: [
AdminController,
UserController,
],
providers: [
JwtStrategy,
UserService,
{
provide: moduleConst.USER_REPOSITORY,
useClass: UserRepository,
},
{
provide: moduleConst.ROLE_REPOSITORY,
useClass: RoleRepository,
},
],
})
export class AppModule {}良かった点
- app.moduleがDIコンテナの役割を担ってくれているので、管理が簡単
- ディレクトリ構造がDDDになるので、どこに何を定義すべきか迷わなくなり、実装が楽