/note/tech

関数的な分解, 手続き的な分解と型による分解

関数的な分解(functional decomposition) や手続き的な分解(procedural decomposition)は、自己完結で独立して宣言できる。

型による分解(type decomposition)は、型は自己完結するが、その型に所属する関数や手続きは自己完結していない。型が持つ属性に依存する。

@masuda220

二つのアプローチは、前者は関数や手続きを独立して追加できるが、後者は関数や手続きを必ず何かの型に所属させる必要がある。

整数と真偽値のみ、というように値の種類が少なければ前者のアプローチが普通。

金額・数量・人数・日付・日数・率など値の種類が増えてくると、型による整理が有力。

@masuda220

関数や手続きも、値の種類ごとに名前空間を分けることで整理は可能。しかし、どんな名前空間にどんな関数や手続きを配置するかの基準はあいまいになる。

型による分解(type decomposition)では、型が持つ属性に依存させるという制約によって関数や手続きの配置に一定の秩序をもたらす。

@masuda220

型による分解は、さらに関数(イミュータブル)のみ定義し、手続き(ミュータブル)を禁止するという制約を持たせることができる。

関数だけを使って型で分解する、というアプローチの具体例が値オブジェクトパターン。

@masuda220

値オブジェクトパターンは、関数だけの型による分解という分割アプローチのわかりやすい具体例。

プログラム分割で、①関数による分解、②手続きによる分解、③型with手続きによる分解、④型only関数の分解、のどのアプローチを採用するかによってモデリングと設計のアプローチがかわる。

@masuda220