phpmentors-jp/mpdosaka

第10章 結論

iteman opened this issue · 11 comments

この章では、本書で扱ってきた主要なアイディアに再考を加える。また、読者が興味を持っているかもしれないのに扱ってこなかった事柄を取り上げ、それに対する解説も行っていく。本書では言及しなかったパラダイムはどうなのだろうか。スケーラビリティの問題はどうなるのだろうか。このようなことに触れ、最後に将来に対する展望を述べる。
新装版 マルチパラダイムデザイン p.261

マルチパラダイムデザインのゴール

10.1 概括 (p.261)

本書で提案してきたのは、マルチパラダイムデザインという設計手法である。マルチパラダイムデザインのゴールは、システムはどのように構築されるべきかを明らかにすることだ。ドメインの構造を把握し、それが持つ意図(intentionality)、システムレベルでのソフトウェアのわかりやすさ、拡張容易性の拡大などをサポートする。

10.1 概括 (pp.261-262)

マルチパラダイムデザインでは実プログラマが利用するのだということを念頭に置いて、これまで当たり前だと考えられてきたこと、あまり重視されてこなかったことにあえてチャレンジしている。本書の新規性は、少数の統一原理をベースとして広範な適用可能性を持つ設計のためのモデルを中心に据えたことにある。本書は実務性を持つだけではなく、設計の中心とでもいうべきゴールを目指した原理を背景にする。つまり、ニーズとして理解したことを柔軟性に富む弾力ある構造に変換することをゴールとする。その構造は何らかの形で表現されていて、ニーズとは矛盾しないものでなければならない。

プログラマのための本

10.1 概括 (p.261)

このようなことはアカデミックな興味だけに留まるものではない。実際のシステム開発において、プログラミングを職業にする技術者の興味をひく話題である。冒頭でも説明したように、本書はプログラマのために執筆したものだ。技術者たちの使用するツールという意味で、技術者たちが待望していたことに焦点をあててきたつもりだ。比喩的に言えば、本書で扱ってきた技法はある地方の方言とでもいうべきオブジェクト指向技法を超越して、さらに汎用的なアプローチで、時を超えた「設計」という言葉に適った価値を持つものだと筆者は考えている。

マルチパラダイムデザインとは何か?

10.1 概括 10.1.1 抽象と意図 (p.262)

マルチパラダイムデザインは単純で基本的ではあるが強力な抽象のモデルである。共通性とバリエーションがその抽象モデルのベースとなる。マルチパラダイムデザインは、人間の認知モデルを下敷きにした共通性とバリエーションを最先端の設計技法に結びつけることにより、技法群を1つの統一設計理論にまとめ上げる。マルチパラダイムデザインは一義的な抽象原理による設計である。

10.1 概括 10.1.2 メタデザイン (p.262)

現在の(および伝統的な)ソフトウェア設計は、パラダイムと呼ばれる設計ツールとルールの組が開始点になる。それらを使用してドメインを分析して抽象を見つけ出す。その抽象は優れたシステム構造を生み出すのにふさわしいものだ。しかし、このようなアプローチには、パラダイムの選択が結果に影響を与えるという問題点がある。さらには、選択したパラダイムが目前の課題に対して適切なものであるという仮定を敷くことになるが、それはおこがましいとさえ言えるだろう。

これに対して、

マルチパラダイムデザインでは、共通性とバリエーションという小道具を活用して、根本課題に向かって一歩後ろにさがって考える。マルチパラダイムデザインを適用すれば、設計者はまさに適ったパラダイムを選択できる。そのパラダイムはドメインが持つ本質構造をベースにしたものになるだろう。

共通性・可変性とパラダイムの関係

10.1 概括 10.1.3 ドメインとパラダイムの関係 (p.263)

また、共通性とバリエーションを管理する様式(style)にはさまざまなものがあり、その個々の様式が現代のコンピュータ・サイエンスでパラダイムと通称されてきたものに対応していることも、マルチパラダイムデザインから明らかになる。このことが、本書で説明してきた技法の下敷きとなる統一的で強力な発明なのである。

ドメイン間の依存性をコントロールする

10.1 概括 10.1.5 ドメイン間の依存性 (p.263)

モジュール性(modulality)は、昔から、優れたソフトウェア設計であるための教義の1つである。しかし、意図(intentionality)という側面と、設計に潜む本質的な複雑性を把握するという目的のためには、ドメイン間に潜む強い結合度を認識し、管理する設計技法を持っていることが重要になる。ドメインというものは、組織やビジネスあるいは歴史的理由で分割されて開発されるものであり、そのために互いに結合し合うものである。

単に疎結合がよいからそれを実現する、というのは困難である。

マルチパラダイムデザインでは、ドメインが本質的にオーバーラップするものだと認識する。そして、ドメイン構造と物理的なソフトウェア構造の結合を取り除くことのできる開発モデルを提案する。つまり、マルチパラダイムデザインではドメインの概念を汎化するのである。可変パラメータの概念を使ってドメインの概念を統一することにより、これを実現している。そのため、ドメインが別のドメインの可変パラメータになることもある。

ドメイン間の依存性を受け入れ、それをコントロールすることが重要である。

デザインパターンとAlexanderのパターン

10.1 概括 10.1.7 デザインパターンの正規化 (p.264)

デザインパターンはアドホックなマイクロアーキテクチャを把握する技法であり、適用されるコンテキストに合わせて仕立て上げられるものである。ところが、Alexanderの提唱した本来のパターン理論[Alexander1979]によれば、前もって形成されている構造を用いて設計するというのは非難すべきことになる。彼のパターン理論によれば、各パターンはトレードオフをカプセル化したものであり、部位間の関係の汎用的な構造配置により記述可能なものである。本書の6.12.2項では、今日日常的に使用されるソフトウェアに関するデザインパターンの構造が、共通性とバリエーションの配置として表現できることを説明した。この構造は設計手法の中で正規化できる。このことから、現在デザインパターンと呼ばれているものは、Alexanderの説いたパターン理論の範疇には含まれないと言えるのではないだろうか。

デザインパターンの構造は、共通性とバリエーションの観点から正規化できるため、前もって形成されている構造であり、それはAlexanderのパターン理論に含まれるものではない。

マルチパラダイムデザインにおけるパラダイム

10.2 さまざまなパラダイム (p.265)

3つのパラダイムの定義が述べられている。

  1. Weltanschauung(世界観)すなわち世界に関するモデル
    • 元はKuhnが提唱して有名になった[Kuhn1970]。
    • Weltanschauung=World view
  2. 計算完全性モデル(computationally complete model)
    • 暗黙的にBuddの提唱[Budd1995]がパラダイムの定義として認められている。
    • オブジェクトパラダイム、関数型プログラミング、ルールベースプログラミング(rule-based programming)などは、この意味でのパラダイム
  3. 共通性とバリエーションの配置
    • 本書で扱われているもの
    • パラダイムと認識の関係から導き出され、あるドメインの独自性と結びつく
      • Kuhnの定義を広い意味で捉えている

範疇外のパラダイム

10.2 さまざまなパラダイム (p.266)

本書と切り離しておくべきものは、共通性とバリエーションで表現されるのではない別定義のパラダイムの工学規則とその文化に由来する。ここでは、Smalltalkによるオブジェクト指向プログラミングというようなパラダイム(これは文化的規範であり、Kuhnが説く意味で「パラダイム」と言えるかもしれない)に関与する工学規則と、データベース設計というパラダイムに関係する工学規則の間には何ら相違が認められないということが重要である。

共通性と可変性というパラダイムに基づかないパラダイムは、マルチパラダイムデザインの範疇外である。

銀の弾などない…

10.2 さまざまなパラダイム (p.266)

設計は難しく、設計者の道具箱には数多くのツールが必要である。そして、設計の広範さはドメイン分析と同程度であり、設計を正規化して、汎用性を完全に備えたケースとするのは困難だ。マルチパラダイムデザインは、巨大なパズルの1つのピースなのである。

現実の中のマルチパラダイムデザイン

10.3 スケーラビリティ (p.266)

ここでいうスケーラビリティはシステムの話ではなく、パラダイムとしてのマルチパラダイムデザインの使用がスケールするかどうか、という話である。STL(Standard Template Library)が成功例として挙げられている。

現実にある多くの優れたフレームワーク(例えばSpring FrameworkやRuby on Rails、Symfony)もマルチパラダイムデザインの使用が認められると考える。

しかし当然のことながら、コードの中に本書の技法の使用が確認されたからといって、マルチパラダイムデザインの概念が意識して使用されたという証明にはならない。優れた設計が、単に直観の良さから生まれることもあるし、高度な能力を有するプログラマであればものごとを表現する方法に対して第六感が働くことだろう。解のスケールに関しては、思考がスケールを処理するというデモンストレーションから証明しようとするのは困難である。

ドメインとは

10.1 概括 10.1.3 ドメインとパラダイムの関係 (p.262)

広い意味で捉えて、ドメインとは関心の焦点があてられた領域のことである。