今日の役に立たない一言 - Today’s Trifle! -

古い記事ではさまざまなテーマを書いていますが、2007年以降はプログラミング関連の話がほとんどです。

IOP(Inside-Out Priciple)

平鍋さんが書いた内容と二人のコメントがいまいち噛み合ってないような気がする。
一般的にシステムなんてのは、何もしなければ何も変わらない。まずはそういった static な面がある。そして、システム外からのアクションに対して、システムが動作する。システムが動作するときには、システム内部の状態変化を伴う場合もあるし、システム外部へのアウトプットが伴う場合がある。そういった dynamic な面がある。
システムのそういう基本的な部分は Outside があろうがなかろうが、動かないといけないわけだ。そのシステムのコアな部分を設計するときに Outside の都合なんて考慮する必要はない。
極端な話をすれば、telnet でログインして、コマンドラインから適当なコマンドを入力することでショッピングカートに商品が入るようなシステムでもいいわけだ。
コアな部分さえしっかりできていれば、UI なんてのはブラウザを使ってもいいし、専用アプリケーションや JWS を用意してもいいわけ。コアな部分は、システムの情報を取得するための API を用意することで、任意の UI が作れるようになる。Inside-Out ってのはそういうこと。
例えば、Webサービスが、まさにそういったアーキテクチャを持っている。
Out から Inside に対する仕様的な要求があった場合、どのように要求にこたえるべきか。少なくとも Inside は、Out の要求を鵜呑みにすべきではない。Inside のアーキテクチャやシステムポリシーに基づいて、Out からの要求は Inside の内部でどう表現すべきか、Out に対してどのように見せるかを十分に検討した設計にすべきだと言うことだ。