試著將自己理解的clean architecture 跟 DDD (Domain Driven Design) 用 Nodejs 做出簡單的開發架構。
- 不被 express 等 External Service 耦合影響。
- Domain Layer, Application Layer, Infrastructure Layer 分層
- 對外 External Service 另外分一層,先用Express。
- IoC: InversifyJS
- RxJS
- Clean Architecture
- DDD
- UnitTest: jest
- TypeORM
- Mongodb: mongoose, mongodb
- swagger
npm init
npm install typescript @types/node
npx tsc --init
npm install ts-node nodemon --save-dev
npm install inversify reflect-metadata --save
TypeScript Interface 在反射("reflect-metadata"
)時,無法使用非實體的interface
去反射,所以在inversify
需要定義:
// default.app.ts
@injectable()
export class AppUseCase implements IAppUseCase {
async getAppName(): Promise<AppName> {
const result = new AppName();
// app.route.ts
@injectable()
export class AppRoute {
private _appUseCase: IAppUseCase;
constructor(
@inject(Symbol.for('IAppUseCase')) appUseCase: IAppUseCase,
) {
this._appUseCase = appUseCase;
// IoC
// DI-container.ts
container.bind<IAppUseCase>(Symbol.for('IAppUseCase')).to(AppUseCase);
npm i --save-dev webpack webpack-cli webpack-node-externals start-server-nestjs-webpack-plugin clean-webpack-plugin
npm i --save-dev ts-loader
npm i tsoa swagger-ui-express
npm i --save-dev @types/swagger-ui-express
InversifyJS 無法用webpack hmr
npm install @nestjs/typeorm typeorm --save
npm install reflect-metadata --save