DDD
SYSTEM METAPHOR (p.447) †
要約 †
SYSTEM METAPHOR
[文脈の説明]
- 隠喩的な考え方は、ソフトウェア開発の分野、特にモデリングでは普及している。
- XPにおける metaphor とは、システム開発における全体像の理解という特有な方法を意味する。
***
[問題についての説明]
問題サマリ
- firewallは隣のビルの火の猛威から守る防火壁という意味がある。
- ソフトウェアにおいて、firewallは、外部ネットワークの危険からローカルなネットワークを保護するという意味で使われる。
- 意味は違えど、これらのfirewallは、消費者にとって有効である。
- ネットワークにおいて、firewall という比喩が、そのコンセプトの核心を掴んでいる事に注意しなさい。
- ソフトウェア設計はとても抽象的で、本質を掴む事は難しい。
開発者とユーザーはシステムを理解し、全体像を共有する為に、有形な方法を必要とする。
- 第1段階として、比喩は全ての設計に普及し、強力な影響力を持つ。
- システムは Layers(層)を持ち、層は、その中心である Kernels を持つ。
- 比喩は、しばしば全ての設計の中心テーマを伝達し、チームメンバに理解の共有をもたらすものとなる。
このような時は、システムは比喩によって、形成されている。
- 開発者は比喩によって、首尾一貫した意思決定を設計に対して行うだろう。
- 比喩による一貫性は、他の開発者が複雑なシステムの多くの部分を理解する事を可能とする。
- 比喩によって開発者とエキスパートはモデルよりも具体的に議論できる手段を手にする。
- SYSTEM METAPHOR は緩く、分かり易いlarge-scale structure である。
- SYSTEM METAPHOR は類似性に過ぎない為、異なるモデルにも当てはめる事ができる。
- BOUND CONTEXTS間に SYSTEM METAPHORを適用する事は、共同作業の手助けとなる。
- 説得力のある比喩は、身近な問題の望まれていない類似性(もしくは魅力的だが、望んでいない結果に終わりがちな類似性)を設計が呈しているというリスクを紹介する。
Therefore:
解決方法サマリ
- システムにおける、チームメンバの想像を容易にし、思索において有益な方向性をもたらす具体的な類似性が現れた時、large-scale structureとして適用しなさい。
- 比喩の周辺で設計を編成し、UBIQUITOUS言語へ吸収しなさい。
- SYSTEM METAPHORは、システムと開発者への説明に関してコミュニケーションを助長すべきものでなければならない。
- そうすれば、システムの難しい部分(異なるBound Context間においてさえ)に関しても一貫性を増やす事ができる。
- 全ての比喩は正確なものではないから、拡張やしっくりこない点にに関して試行錯誤しなさい。そして、もし、それが不適切であるなら、取り除く心積もりもしておきなさい。
***
The "Naive Metaphor" and Why We Don't Need It(素朴な比喩とそれを必要としない理由) †
- 殆どのプロジェクトでは、それ自身に比喩が存在しているわけではないので、ドメインモデル自身を意味するnaive metaphor を XPコミュニティーの中で議論するようになった。
- この用語の問題の1つとして、成熟したドメインモデルは全くnaive(素朴)ではない。
- 実際、『給与支払いのプロセスは生産ラインのようなもの』という表現は、ドメインエキスパートと知識の咀嚼を繰り返し、稼動しているコードに厳しく反映される事によって証明されているモデルよりもずっと単純である。
- 故に naive metaphor という用語は廃止されるべきである。
- SYSTEM METAPHORS は全てのプロジェクトにとって有益というわけではない。
- XPの12のプラクティスにおいて SYSTEM METAPHORS の役割は、UBIQUITOUS言語で果たされる。
担当者のつぶやき †
- 『large-scale structure』を日本語にすれば、『システム概要』とでもすれば良いのだろうか?(large-scale = 大規模 と理解する と訳が変になる)
- p448 2段落目の 『A Persuasive 〜』が上手く訳せてませんが、要は、説得力のある比喩は、概要だけでなく、リスクも表現できているって事だと思います。
みんなの突っ込み †
- P448下段の "a maure domain model is anything but naive" は、成熟したドメインモデルはnaiveではあり得ない、だと思います。 -- 渡邉?
- >anything but naive なので、ご指摘の通りですね。直しておきます。 -- 池田?
- A persuasive... は、「説得力のあるメタファは、手近な問題にはふさわしくない、もしくは(魅力的だが)あまり得意でない類似性に沿った設計を持ち込んでしまうリスクがある」というようなネガティブな意味かと思ってました。 -- 渡邉?