概要 弊社で開発中のプロダクトは、ドメイン駆動設計とクリーンアーキテクチャを組み合わせた設計となっています。 これまでフロントエンドの開発を担当することが多かった中で、golangでのAPI開発を担当した際に、「この処理はRepositoryに書くべき?」「Usecaseにこの処理を書いたら責務を持たせすぎ?」「Domain ServiceとUsecaseはどう分ける?」など迷うことが多々ありました。 そこで、これら設計に関する考え方を整理するために具体的な実装を踏まえてこの記事を書いています。 この後、インフラストラクチャ層・プレゼンテーション層は別の記事として書く予定です。 DDD(ドメイン駆動設計)とは ドメインの専門家からの入力に従ってドメインに一致するようにソフトウェアをモデル化することに焦点を当てるソフトウェア設計手法である。 ドメイン駆動設計 下の画像のように4つの層に責務を