@kawanamiyuu です。この記事は「ドメイン駆動設計#1 Advent Calendar 2019」の 6 日目の記事です。
1. はじめに
最近、技術イベントやまた社内でも「ドメイン駆動設計」や「クリーンアーキテクチャ」についての話題をこれまでにも増してよく耳にするようになりました。
私も楽楽労務という実際のプロダクト開発で 1 年以上、ドメイン駆動設計に取り組んできました。ドメイン駆動設計 チョットデキル ような気がしてきたころ、このように思いました。
「ドメイン駆動設計って、『オブジェクト指向設計をちゃんとやる』ってことだよね?」
ドメイン駆動設計もクリーンアーキテクチャも、オブジェクト指向設計原則のうえに成り立つ設計プラクティスであり、ただ、重要な視点として、オブジェクト指向設計原則の適用を検討する対象がクラスだけではありません。もう少し大きな単位、パッケージ・モジュール・レイヤー、まで視野を広げます。
- 依存関係が注意深く設計され、単一の責任を持ったモジュールやパッケージが、ドメインをかたちづくります
- レイヤーやパッケージの依存関係の逆転により、ドメインは自身の関心や責務を逸脱することなくビジネスロジックの実現に集中できます
ドメイン駆動設計がオブジェクト指向プログラミングによって実現されるということは、そのアーキテクチャも、私たちが慣れたいつもの方法 ─ ユニットテスト ─ で、テストすることができます。ソースコードもアーキテクチャも、一度つくって終わりではありません。プロダクト開発が続くかぎり、常に見直され改善されるべき対象です。
......
前置きが長くなりましたが、この記事では依存関係という切り口から、アーキテクチャの品質を継続的に維持・改善していくための手法として、ArchUnit (Java) によるアーキテクチャテストを紹介します。
ArchUnit って何?については昨年のアドベントカレンダーに投稿しています。
続きを読む