https://zenn.dev/hisamitsu/articles/2937fc4dd9bd4c

DDDで開発しようと思って、入門書を勉強して理解した気になっても、いざコードを書こうとすると、なかなか実装のイメージがつかなくて手が止まる、といったケースはあるかと思います。少なくとも、私はそうでした。 この記事では、一旦、DDDのモデリングの部分は置いておいて、コードを実装する上で知っておいた方が良さそうなことをいくつかピックアップして紹介していきたいと思います。いずれも基本的な内容のため、DDDを習得している方にはあまり新しい発見はないかもしれません。 なお、例として用いる言語はTypeScriptです。

DDDで実装してみてなにが良かったか

本題に入る前に、まずはDDDで実装するモチベーションを上げていただくために、実際にDDDで実装してみてよかった点をいくつかあげます。

一応、よくなかった?点も書いておきます。

おさえておきたい4つの基本事項

1. ORMのエンティティとは別にドメイン層にエンティティを用意する

ドメインオブジェクトは、基本的にエンティティを使って表現します。エンティティと聞くと、ORMのエンティティが思い浮かぶかもしれませんが、全く別物です。ORMのエンティティは、TypeORMなどの特定のライブラリに依存するものですが、ドメイン層のエンティティはプレーンなオブジェクトで、何にも依存してはいけません。ORMのエンティティにロジックを書く、といった横着はせず、諦めてドメイン層に別のエンティティを用意しましょう。 以下、シンプルな例です。

2. リポジトリの取得メソッドはドメインオブジェクトに詰め替えて値を返す

リポジトリの取得系のメソッド(findなど)は、DBから取得した値をそのまま返すのではなく、ドメインオブジェクトに詰め替えてから返します。これにより、リポジトリから値を受け取ったユースケースは、すぐにドメインオブジェクトのメソッドを呼び出すことが可能になります。以下、例です。