プログラミング

[開発記録]TypeScript+Express+MySQLで、簡易的なAPIサーバを構築した話②-開発プロジェクト初期化-

「TypeScript Express PostgreSQL」2本目です。
今回はプロジェクトの構造デザインと、ソース配置のお話です。ミドルウェアを複数利用するため、各ミドルウェアの関係を明確化したうえで、ソース配置を検討します。

構築デザイン

Node.jsで、簡単なCRUDアプリケーションを構築します。
重要なのは2点です。今回は学習目的なので、ミドルウェアを適切に利用できればいいと考えています。

  • ・Typescriptを利用して開発すること
  • ・Node.jsを利用したCRUDアプリケーションを作ること
  • ・APIサーバはExpressを利用すること
  • ・データはメモリ上ではなく、DBに保管すること

デザインは以下のようになりました。ExpressでルーティングしたAPIからSQL Clientを利用して、Dockerコンテナ上に構築したPostgreSQLのDBを対象にデータ操作を行うよう設計しました。

ソース配置

下記の通り配置する予定です。

src
├── applications
│   └── routes
├── domain
│   ├── controllers
│   └── entities
└── infrastructure

  • src : ルートフォルダ。tsconfig.jsonやpackage.jsonと同じ階層です。
  • applications : データ操作とは関係のない、アプリケーションに必要な機能を実装します。
  • routes : ルーティングを実装します。
  • domain : データ操作と関連のあるオブジェクト、操作を実装します。
  • controllers : APIの処理を実装します。
  • entities : APIで操作するデータを定義します。
  • infrastructure : DBとの接続を定義します。

DDD:ソース配置の思想

今回、ソース配置を行うにあたってDDD(Domain Driven Design)を参考にしました。DDDはApplication層、Domain層、Infrastructure層など、いくつかの層にプログラムを分割します。

特徴的なのはDomain層です。DDDではシステム化する対象の業務や、その関係要素をDomainと定義しているのですが、そのDomainに関する処理やオブジェクトを、ほかのソースから分割し、Domainとほかの要素の依存度を下げます。

これにはいろいろなメリット、デメリットがあったりするのですが、触れようとすると3本くらい記事が必要になるのでここでは触れません。

もしご興味のある方は、下記がわかった気にさせてくれるので見てみてください。きっと一度では理解できませんし、ほかの解説記事も読まないと実践できません。

Githubに公開しました。

Githubに公開しました。

今後は上記のプロジェクトで実装した内容を、備忘録的に記事にしていく予定です。

以上。次回に続きます。