ドメインを隔離する
思考を最適に働かせるには、モデル要素を見た時に1つの体系として理解できる必要がある。より多くのオブジェクトが入り混じった中から、モデル要素を拾い上げるように強制されることはあってはならない。・・・ドメインオブジェクトはシステムの他の機能から切り離す必要がある。(第二部 第四章より)
「より多くのオブジェクト」とか「システムの他の機能」とは、ソフトウェアシステムに関するオブジェクト。データベースアクセスやビューに関するオブジェクト。
複雑なのは、技術的なコードよりもユーザーの活動やビジネス、つまり、ドメインモデル。(「まえがき3 複雑なのはドメインそのもの」参照)なので、ドメインと技術的な要素を切り離すことが大事になってきます。
ドメイン関連のコードがそうした膨大な他のコードの中に拡散してしまうと、コードを見て意味を理解するのがきわめて困難になる
ドメインを他のコードと切り離し、プログラマはもちろん、ドメインエキスパートもソースから理解できるようにするのもドメイン駆動設計の目指すところです。(「第一章 知識をかみ砕く5 ドメインエキスパートもコードが読める」参照)
レイヤ化アーキテクチャ
よく用いられるものではあるが、ドメインモデリングの原則を適用する上では決定的に重要(第二部 第四章より)
レイヤ化アーキテクチャ自体はDDDで新た定義されたものではないですね。
PoEAA本には既にレイヤ化として紹介されてますし、「三層レイヤ」・「多層アーキテクチャ」という形で以前から使用されてきたもの。
ですが、これがドメインと技術的なコードを切り離すのに役に立つということですね。
レイヤ化アーキテクチャの詳細はまた明日読みます。