node の API サーバーの勉強のため できるだけ DDD× クリーンアーキテクチャな構造で作りたい
- api
- Http
- Controller
- [DomainName] -[CRUD or Function]
- [UseCaseName]Controller.ts
- [DomainName] -[CRUD or Function]
- Controller
- Domain
- [DomainName]
- index.ts - Entity
- [DomainName]
- Infrastructure
- repositories
- [DomainName]
- I[DomainName]Respository.ts - [Data Access Interface]
- [DataBaseName][domainname]Respository.ts - [Data Access]
- I[DataBaseName]Connection.ts - DataAccess が DB に直接依存しないように DB との接続をラップする // あまり重要じゃないかも
- [DomainName]
- repositories
- UseCase
- [DomainName]
- [UseCaseName] -[CRUD or Function]
- [UseCaseName]InputData.ts - [Input Data] Controller が受けた requestBody から UseCase が使用するオブジェクトに変換することで UseCase が Controller に依存しないようにする
- I[UseCaseName]UseCase.ts - [Input Boundary] UseCase が持つ関数などのインターフェースを定義するクラス
- [UseCaseName]Interactor.ts - [UseCase Interactor] 実際にオブジェクトを操作する UseCase の具象クラス
- [UseCaseName] -[CRUD or Function]
- [DomainName]
- Http
- view
- components
- uiParts
- [ComponentName]
- index.tsx
- [ComponentName]
- organizms
- [ComponentName]
- index.tsx
- hooks.ts
- [ComponentName]
- templates
- [ComponentName]
- index.tsx
- hooks.ts
- [ComponentName]
- uiParts
- hooks
- use[DomainName].ts - 共通で使用するカスタムフック
- modules - apiclient など
- styles - globalcss
- components
- pages - router
- api - api router
- page - page router
- public - フロントで使用する画像など(gcp とかに画像を置くなら fabicon とか以外はいらない)
- types - 共通の型を定義する 例 apiRequestBody, apiResponseBody
view の Components の分け方をもう少し Domain に寄せてもいいのかも 状態管理に mobx か recoil あたりを入れようか迷っている
参考