第11章. リデザインに賭ける
この作品はAIを使って翻訳されている。ご意見、ご感想をお待ちしている:translation-feedback@oreilly.com
全体として、ニーズが高まるにつれてデザインを進化させる価値はある。1マーティン・ファウラー『エンタープライズ・アプリケーション・アーキテクチャのパターン』(アディソン・ウェスリー、2002年)
第3章で、Portfolio エンティティを紹介した。このエンティティは我々のドメインの重要な概念を表しているので、責任を与えるのは当然だ。さて、Portfolio はあまりに多くの仕事をするので、それが表れている。その主な仕事は、Money エンティティのリポジトリになることである。しかし、通貨間のコンバージョンという責任も負っている。そのために、為替レートテーブルと変換ロジックを保持しなければならない。これは、Portfolio の責任には見えない。通貨変換は、ピーナッツバターがピザの上にあるのと同じくらい、ポートフォリオにあるべき仕事である。
私たちのソフトウェア・プログラミングは、私たちのニーズとともに成長してきた。我々の設計を改善し、現在実装されている通貨間の変換方法よりも優れた抽象化を探す価値がある。
ドメイン駆動設計(DDD)の原則は、継続的な学習である。 ドメインについて新しいことを学んだら、獲得した知識を設計に反映させる。その結果得られる設計とソフトウェアは、ドメインに対する理解の向上を反映したものでなければならない。
チップ
ドメイン駆動設計は、TDDによって支えられている学問である。エリック・エヴァンスの同名の著書は、このテーマに関する代表的な著作である。
ここ数章にわたって通貨変換を実装することで、私たちのプログラミングに新鮮な洞察を得ることができた。 重要な存在が欠けているのだ。両替を助けてくれる現実世界の機関の名前は何だろう?銀行だ。あるいは両替所だ。多くの場合、ドメインには複数の類似したエンティティがあり、我々のモデルの観点からは区別がつかない。どの違いが重要で、どの違いが重要でないかを学習することは、効果的なドメインモデリングに不可欠である。
この名前付けをBank とする。Bank の責務は何だろう? 一つは為替レートを保持すること。そして、為替レートに基づいて通貨間の両替ができなければならない。Bank は非対称の為替レートを許容すべきである。現実の世界には非対称の為替レートが存在するからだ。最後に、Bank 、為替レートがないために、ある通貨のお金を別の通貨に両替できない場合は、明確に通知すべきである。(通貨変換の基本規則をリストした第8章の「お金を混ぜる」を参照のこと)。
為替レートを保持するエンティティになることで、Bank 、コードも消臭される。嫌な臭いとは、為替レートを格納するためのキーの作成-例えば、USD->EUR-がPortfolio のあちこちに散らばっていることだ。この臭いは、抽象化が漏れていることを示す信頼できる指標である。為替レートの表現-キーと値-をBank の内部に置くことで、Portfolio が評価を行う方法を単純化することができる。
チップ
ある実体から別の実体へと、本来あるべきでないところにレスポンスが漏れてしまうことを「漏出抽象化」と呼ぶ。 ジョエル・スポルスキーの言葉を借りよう:「すべての非自明な抽象化は、ある程度漏れやすい」。しかし、空いた穴は再設計によってふさぐべきである。
依存性の注入
この新しいエンティティの必要性を確認した上で、次の問題は、 ...
Become an O’Reilly member and get unlimited access to this title plus top books and audiobooks from O’Reilly and nearly 200 top publishers, thousands of courses curated by job role, 150+ live events each month,
and much more.
Read now
Unlock full access