私たちは皆,実現不可能である,あるいは少なくとも相当な労力が必要と分かっている,そんなソフトウェア変更を依頼された経験を持っています – 先日のLondon Springユーザグループのミーティングで行われたRuss Miles氏のプレゼンテーションは,このような話題で始まった。
氏はこれを "致命的変更の不都合な真実" と呼んでいる – システムないしソフトウェアの発展についての想定の相違が不都合を生じ,悪い知らせを伝えざるを得なくなる,という状況を示す言葉だ。
問題解決のために氏は,自身がJavaとSpringでアプリケーションを開発する場合に使用しているテクニックを公開してくれた。先に述べたような経験をする機会を少なくするためのテクニックだ。システムに望まれるものとして,氏が挙げるのは安定性だ。現実の世界は変化するので,これに対応したいという希望はある。しかし我々の構築するシステムは,開発者である我々ほどの適応性を持たないことも多いのだ。
ここで氏は,Alistair Cockburn氏のヘキサゴナルアーキテクチャ (Hexagonal Architecture, 六角形アーキテクチャ)を紹介する。2005年当時,氏が解決したかった問題のソリューションとなったアーキテクチャだ。
- 従来型のレイヤ構造に関する問題。ソフトウェア開発の方法ではない。
- 結合に関する問題。例えば開発ツールでリファクタリングを行うとき,多数のクラスあるいはファイルが変更の対象になるならば,結合が存在する証拠である。
- 絡み合い。複数の事象が必然性なく発生することにより,ソフトウェアが理解し難いものになる。これはバグの温床でもある。
氏はこのヘキサゴナルアーキテクチャをさらに進めて,Life Preserver(救命用具)と呼ぶものを作り上げた。アプリケーションがどの程度,種々のサブドメインやコンポーネントに分離されているかを整理し,視覚化するためのツールだ。
自身の考えをJavaとSpringで実現する方法を示すために,氏は現実のアプリケーションを例として検討を行っている。ヘキサゴナルアーキテクチャを実装した単純な注文処理システムで,すべてのサブドメインがメッセージ送信を使って通信する,イベント駆動アーキテクチャを採用している。
今年の始めには,同じテーマを取り上げて2回のプレゼンテーションを行っている。ひとつはシステムアーキテクチャでのイベント使用に関するもの,もうひとつはイベントを使ってシステムの単純化を図るものだ。
Life Preserverやヘキサゴナルアーキテクチャと同じ部類の手法としては,"ボブおじさん"ことRobert C. Martin氏が今年6月に講演した,クリーンアーキテクチャがある。