この記事はハワイアンAdvent Calendar 2020 17日目の記事です。おはようございます。ちょっと二日酔いです。あー。でもなんかネタは降ってきていていたのかもしれないです。メモを見ると「ビジョン思考、原理原則、引き出し、漸進、誘導」とのことです。
進化的アーキテクチャが誘導的だと言われる所以は、そのアーキテクチャに目標が示されつつも、複数の次元での理想的なソフトウェアアーキテクチャとは何かを常に問う事になる所にあると感じています。複数の次元での"漸進的"な変化をサポートする為には、複数の次元の"ビション"を問う事になります。理想を知らなければ現実には落とせない訳ですし、理想について思考を張り巡らせているから、問題に直面した時、もしくはターニングポイントで誘導的になれる訳です。
ソフトウェア設計における理想って何でしょう。原則が守られていることでしょうか。生産性でしょうか。内部品質としてはそうでしょう。でも実際はサービスのビジョンに対して戦略戦術が短期的にも長期的にも一致している事ですよね。本質的にはですよ。じゃあ設計原則守らなくていいって話じゃないです。最終的に原理原則に辿り着くまでの漸進的な変化の道筋を考えるという話です。
そういえば、デザインパターンはライブラリ開発者のものになったとしばらく言われていたのを思い出しました。実際どうなんでしょうね。デザインパターンは全ての状況における最善の設計ではないですが、今でも有効な核心をついたデザインパターンもあります。Active Objectパターンはマルチスレッドプログラミングにおけるデザインパターンの1種でしたが、マルチスレッドプログラミングの文脈を抜きにしても、invocationとexecutionが分離されているという状況について改めて考えてみると、達成したい事・守るべき事と、解決方法が分離されている訳なので、それぞれの次元で変化していく事ができます。これって進化的ですよね。いや〜デザインパターン知っといて良かったなあって思います。デザインパターン知っといて良かったエピソードってなんだかんだあると思うんですよね。デザインパターンだと知らずにコード書いてる人もいますが。
ちょっと脱線してしまいましたが、理想に向けて引き出しを沢山持っておき、適切に引き出してソフトウェアアーキテクチャを導いていきましょう、という話でした。