ずいぶん前にオブジェクト倶楽部のメルマガに書いた記事ですが、人気がある、ということなので、図を加えて再掲します。

ソフトウェア原則 [2] IOP(Inside-Out Principle)

Inside-Out Principleは、「中から外へ向って設計せよ」というBertrand Meyer(*1)のソフトウェア設計原則で、「Model Before UI」とも言います。

ユーザとの界面を持つソフトウェアでは、まず「モデル」を設計し、後で界面を設計するという指針になります。モデルとは、このソフトウェアが扱う問題領域の「基本概念群」です。
例えばレンタルビデオ屋のシステムであれば「ビデオ」、「貸し出し」、「顧客」などなどの基本的な概念群がキャプチャできるでしょう。これらの概念群を分析し、概念間の関連や汎化構造を探索することで、「概念モデル」と呼ばれる分析成果物が得られます。

まずこのモデルを設計し、そこからユーザインターフェイスを設計します。最初から画面デザインや画面の遷移を細かく設計してはいけないのです。  

1 2 3_1

なぜこうするのでしょうか?理由は、ユーザインターフェイスは変化しやすく、モデルは変化しにくいからです。あるいは、ユーザインターフェイスは要求変更に敏感であり、モデルは要求変更に鈍感であるとも言えます。オブジェクト指向設計の有効性の1つは,要求変更に強いソフトウェア構造を作り出すことです.そのために,変更されにくい部分をまず固め,その後で変更されやすい部分を固めるのです.

別の言葉で説明すると、IOPを適用することでソフトウェアの「アーキテクチャ連続性」が確保できます。よいソフトウェア構造はアーキテクチャ連続性を持っており、小さい要求変更は小さいアーキテクチャ変更になるべきなのです。x軸に要求、y軸にアーキテクチャをとった関数が連続関数となり、要求を左右に微小に揺さぶってもアーキテクチャ変更は微小である必要があるのです。

みなさんも、ほんのちょっとした要求変更がシステム全体に渡って大きな変更を引き起こす例を、過去に経験しているはずです。このような作りは、微小な要求変更に対してアーキテクチャがジャンプしてしまう、不連続なアーキテクチャと言えます。

Inside-Out Principle によって、アーキテクチャ連続性の高いソフトウェア構造が作られます。設計順序はモジュールの依存性の方向と一致するので、内側の変更は外へ伝播しますが、外側の変更は内へ伝播しません。変更の多い外側の変更は、外側だけで食い止められるのです。

では、なぜ一番内側のモデルは安定している、と言えるのでしょうか?それは、オブジェクト指向では、現実世界とソフトウェアモデルをできるだけ1対1にマッピングするからです(これを、"Direct Mapping Principle"と言います)。現実世界の基本構造というものは変化しにくいため、モデルも変化しにくいのです。「顧客」という概念は、「貸し出し画面」というユーザインターフェイスよりもシステムのライフサイクルに渡って安定しています。

Inside-Out Principleの1つの具体設計例として、MVCアーキテクチャがあります。システムを Model/View/Controllerに分割する手法です、オブジェクト指向の発祥であるSmalltalkの開発環境から、現代のWebを使ったインターネットシステムまで、応用例の大変多いアーキテクチャです。

また、Inside-Out Principle をより抽象化すると、「安定性の高いモジュールから設計せよ、そして安定性の方向と依存性の方向を一致させよ」という、Robert C. Martin(*2) の "Stable Dependencies Principle" になります。

      *      *      *

ところで、ソフトウェア設計とは何でしょうか?今回紹介した原則からソフトウェア設計という活動を再定義すると、

システム全体をレイアウトする「場」(アーキテクチャ)を作り、
そこに安定性の順序に従って抽象を切り出していく作業。

だと言えるでしょう。今回は上記のレイアウトと順序についての原則でした。次回は、次の「抽象を切り出す」指針についての原則を紹介していきます。
(平鍋)

*1: "Object-Orietend Software Construction 2nd", Prentice Hall, 1997
*2: "Agile Software Development", Prentice Hall, 2003

平鍋

Special

- PR -
コメント
emeitch 2006/04/06 13:51

こんにちは。

Inside-Out Principle なのですが、前々から、この原則の「中から外へ向って設計せよ」という解釈に関して少し疑問を持っております。

といいますのも、私はこの原則は、設計順序というよりは、完成順序というほうが正しい解釈なのではと思っているからです。

依存関係という視点から考えた場合、外から中へ向かって依存が発生すると私は考えています。すると、設計の順序としては、むしろ外から中へ向かっていくのが、TDD/BDD的思想から言っても正しいのではと考えています。

逆に、中から外へ向かっての設計を進めるのは、ある種の前払い設計を彷彿とさせます。

ここらへんは、「良いモデルとは何か?」の考え方にも拠るのかもしれません。
現実世界としっかり対応がとれているモデルこそ「良いモデル」と考える人にとっては、「中から外」の設計順序がよいとなるのでしょう。
そうではなく、内側に依存する、外側のコンポーネントにとって使いやすいモデルこそ「良いモデル」と考え人にとっては、「外から中」の設計順序の方がより適合するのではと考えます。

私は、モデルの設計に関して、この二つのバランスのとり具合こそが重要と考えてます。となると、設計順序は「両方から」ですかね。

となると、「Inside-Out Principle」の本質はどこだろうと考えると、ヒントは、中にあるモデルの方が安定度が高いという事実にあると考えます。

つまり、「中から外へ向って洗練せよ」ではないかと思うのです。

chris ding 2006/04/06 23:15

システムのInsideとOutの関係を考察すると、普通Outがメインで、Insideがサブであることが多い。InsideはOutのために存在する(内容と形式のような関係ではない)。Outによって、実行環境、開発環境、または開発言語まで変えたほうがよい場合がある。従って、必ずしもInside-Out Principle がどんな場合でも正しいとは言えない。

要求変更に強いことがオブジェクト指向設計の有効性の1つであれば、それが弱点の一つでもある。何故ならば、どんな要求にも迅速的に、柔軟に対応できると、要求変更の妥当性に鈍感になるからである。


コメントを投稿する
メールアドレス(必須):
URL:
コメント:
トラックバック

http://app.blogs.itmedia.co.jp/t/trackback/77444/2953898

トラックバック・ポリシー


» このブログのTOP

» オルタナティブ・ブログTOP



プロフィール

平鍋 健児

平鍋 健児

株式会社チェンジビジョン代表取締役社長、永和システムマネジメント副社長。
オブジェクト指向開発、UMLの勘所、アジャイルな開発手法の未来、マインドマップのソフトウェア開発での利用方法、プロジェクトファシリテーション(見える化)を語ります。現在、マインドマップとUMLの融合エディタ、astah*(アスター、旧JUDE)を開発中。

詳しいプロフィール

最近のトラックバック
カレンダー
2012年5月
    1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31    
カテゴリー
エンタープライズ・ピックアップ

news094.gif ストレス社会との付き合い方
政府がメンタルヘルス検査の義務化を検討しています。しかしうつになった後だけではなく、なる前の予防も大切なのではないでしょうか。(5/24)

news094.gif 「思いやり経営」のススメ
産学・NPO連携の民間団体が先頃、「思いやり経営」という観点で評価した指標や企業ランキングを発表した。企業のマネジメント力を知る手立てとして注目されそうだ。(5/24)

news094.gif テレワークが労働者のマインドを変える
テレワークが普及すると、労働者の評価は従来の「時間×生産性」から「成果」へと変化する。時間や場所を自分の裁量でコントロールできる変わりに、成果を最大化するために労働をマネジメントする能力とマインドが労働者には必要になる。(5/23)

news094.gif 求む、クックパッド男子
高身長も高学歴も高収入もいらない。私が男性に求めるのは「料理の腕」だけです。(5/18)

news094.gif 37歳の常識――我々は一生学び続ける
学び続けなければ衰退するのみだ。(5/18)

オルタナティブ・ブログは、専門スタッフにより、企画・構成されています。入力頂いた内容は、アイティメディアの他、オルタナティブ・ブログ、及び本記事執筆会社に提供されます。

Special

- PR -

サイトマップ | 利用規約 | プライバシーポリシー | 広告案内 | お問い合わせ