Design It! 輪読会 8章 「意味のあるモデルで複雑さを扱う」

今回は8章をおこないました。8章は「意味のあるモデルで複雑さを扱う」と題された章で、ソフトウェアシステムが成長・拡大していく中で複雑化していくものをコントロールする方法を学ぶ章でした。

www.oreilly.co.jp

この章で伝えたいことを整理する

今までの章からアーキテクチャは要素と要素同士の関係から成り立つものであると学びました。 そして、この要素たちをうまく使っていくと複雑化していくアーキテクチャを見通すのに役立つと述べられていました。

1つの方法として、複雑していくアーキテクチャを抽象化することによって、細かい部分を考える必要がなくなりアーキテクチャそのものを見通しやすくなります。 しかし、正しく抽象化しないとメンバに共有しても理解を得られないことがあり、抽象化しアーキテクチャのモデルを作成する際には注意しなければならないことも述べられていました。 優れたアーキテクチャのモデルには次のような4つの利点があります。 「設計の語彙を確立する」「関心を持つべき細部に注意を向ける」「品質特性やその他のシステム特性を見通せる」「アーキテクトの意図を記録できる」といったことが挙げられていました。

本の中で書かれていた「メタモデル」は輪読会の中でも理解が難しいポイントになっていました。 自分の答えとしては、「オブジェクト指向プログラミングにおけるインターフェイスのようなもの」と言いました。しかし、改めて読むとそれはモデルが役割として担っているのでメタモデルの答えとは適切でなかったように感じます。 現時点での解釈では、その後の章の「新しい概念を固定化する」「アーキテクチャの芽となるパターンを選ぶ」「矛盾を調整する」「良い名前を使う」の流れだけを追うと、プロトタイプを作成するような流れに感じます。 例えば、新しいモデルを作成するに当たりいくつかの概念を固めていき、その中から核となりそうなものを取り出します。 次に核と周辺の概念を調整していき最終的に適した名前をつけていくといった流れです。 プロトタイプでも、まずはSNSECサイトなどの作ってみたいものを定義します。 その後、システムの核となる部分を見つけ出し、ECサイトだとユーザが購買する流れを定義します。 次に、商品の一覧画面や詳細画面、それらをどうカードに持っていくかを調整していき、最終的にそれぞれが特徴となる名前付けをおこなっていくのではないかと思いました。

その後の章では、作成したモデルをコードとして表現していくときに、乖離がおきないように足並みをそろえていくことが大切と書かれていました。 コードをモジュールやパッケージに合わせて整理したり、自ら定めたルールに頼るのではなく、言語の特性などを生かして矯正させる方法を使うことも大切だと述べられていました。 コードが関わってくる部分では、クリーンアーキテクチャなどの文献が役立ちそうです。