第三回ボトムアップドメイン駆動設計に参加してきた

第三回ボトムアップドメイン駆動設計に参加してきた

もともと現在DDDを部分的に開発に導入していました。ただ、下記のような悩みがあったので、「第三回ボトムアップドメイン駆動設計」に参加してきました(nrsさん主催)。

  • 周りにあまりDDDについて話す人がいなくて、社外の人の意見も聞いてみたい
  • 自分がやっていることは、本当に正しいのか確認したい
  • DDDについてもう少し正しく知りたい

先にざっと参加してみた結果を話すと、参加前の悩みは割と解消されました。本当にnrsさんありがとうございました。

  • 自分がやっていたことは大方間違っていなかったと確認できた
  • 疑問に思っていたことが解決された
  • DDDについて前よりは正しく知れたと思う

勉強会の資料

勉強会の資料ですが、どれも分かりやすく分量の割には読みやすかったなと個人的には思ってました。ぜひ読んで見てください。

  • 前編

  • 後編

疑問に思っていたこと

1. Application Serviceってどういう単位で分けるのか?

これは、当日自分がTwitterで質問していたものを拾ってもらいました。
nrsさんは、アクション単位でファイルを分けているとのことでした。
現在Application Serviceクラスがあって、その中で 一覧取得新規登録更新削除のメソッドを実装していました。ただ、オープンソースなどを見ていると、アクションごとに分けれていることが多かったので、アクションごとに分けたほうがいいのかなとずっと疑問に思っていました。ただ、個人的には、プロダクトの規模などをみてApplication Serviceクラスの単位は分ければいいかなと思いました。

2. Domain Serviceとは業務ロジックを実装するところなのか?

これも、当日自分がTwitterで質問していたものを拾ってもらいました。
業務ロジックというのが広い範囲すぎるのはあるのですが、nrsさんは、Domain Serviceとは、Entity, Value Objectに沿わないロジックを処理するところと説明していたと思います。そのため、Domain Serviceが業務ロジックの全てを実装するところではないです。
現在Model(Entity)に業務ロジック系を実装していたのですが、そもどもDomain Serviceの存在を知らなかったので、今後はDomain Serviceも活用して行きたいと思います。ただ、Entityに実装するロジックとDomain Serviceに実装するロジックの判断がまだ分からないのでもうちょっと理解を深めようと思いました。

3. トランザクションはApplication ServiceとRepositoryどっちにも実装するべきか?

勉強会後に個別で聞いた質問です。
nrsさんの回答としては、Application Serviceにしかトランザクションは実装しないとのことでした。そもそも、インフラ層のRepositoryはトランザクションの責務ではないとのことでした。
個人的には、Repositoryもアトミック的に使用されるのでトランザクションを実装するべきかなと思いましたが、そもそも、トランザクションがサービス1つに対して担保するものだと思い、nrsさんのご意見もあり、今後はApplication Serviceのみでトランザクションを実装しようと思いました。

今後の勉強

勉強会の資料でも記載されていましたが、今回の勉強会では、軽量DDDというパターンを理解するためのものでした。そのため、あとはマインドを取得必要があるので、下記の記事と書籍を読み進めたいと思います。

まとめ

個人的には、目的だったものが達成されたのと今後どういう風にしていきたいかなども明確になったので大変有意義な勉強会でした。また、nrsさんの勉強会は今の自分にどんぴしゃのものが多く(Atomic Designなど)今後も勉強会に参加していき、登壇者とかにもなっていきたいなと思いました。ありがとうございました。

P.S
Twitterもやっているので良ければフォローお願いします!