閉じた操作 と オートポイエーシス

DDDでは、操作の結果として、その引数と同じ型のオブジェクトを返すような操作を《閉じた操作》と呼んでいる。数学の考え方に近く、よけいな概念をなるべく取り除くように設計する方法の1つになっている。

1 + 1 = 2

《閉じた操作》の観点から上の数式を見直すと、実数と実数を足し合わせると実数ができる、実数以外の概念が出てきていないことがポイントになる。DDDの8章に出てくるシェアパイにも似た特徴がある

シェアパイ A+ シェアパイB = シェアパイC

《閉じた操作》の周辺には、《値オブジェクト》、《副作用のない関数》、《概念の輪郭》が隣接しており、これらを合わせると、《閉じた操作》を使用する魅力が増すことになる。


《閉じた操作》が、何かに似ているなと思っていたら、思い出した。ルーマンオートポイエーシスだ。
コミュニケーションがコミュニケーションを産出し続ける閉じたシステム系。
閉じた操作の無限呼び出しに似ている。

違いもある。ソフトウェアシステムでは、操作の無限呼び出しは、バグとして扱われる。一方、オートポイエーシスの観点であれば、継続的に動作しつづけるためのキーとなる。

エリック・エヴァンスのドメイン駆動設計 (IT Architects’Archive ソフトウェア開発の実践)

エリック・エヴァンスのドメイン駆動設計 (IT Architects’Archive ソフトウェア開発の実践)