仕掛構造での操作

構造制約を考えた場合、オブジェクトは構造制約を満たしていると保障されている状態と保障されていない状態(編集中)に大別されることになります。オブジェクトの操作(導出属性を含む)を考えた場合、構造制約に依存しなければ問題ないのですが、オブジェクトの操作の中には、構造制約の全部または一部を満たしていることを保障している必要があり問題を複雑にします。
構造制約に依存する操作については、必ずオブジェクトの構造制約チェックするアイデアはありますが、場合によっては検証が高コストになる可能性があります。このため、必要最低限のチェックや検証状態をキャッシュすることを考えるのですが、問題を複雑化してしまいます。

Valueタイプのオブジェクトであれば、オブジェクトをイミュータブルにすることで、コンストラクタやファクトリなどでチェックすることで、構造制約を必ず満たすことができるのでこの問題を解決できます。しかし、もちろんイミュータブルにできない場合も多く、結局は制約構造を満たしているかわからない状態で利用しなければならない操作を識別することで、問題を限定していくのが最善だと考えています。

このためには、「構造制約に依存し構造制約が満たしていると確認されていない状態」で利用される操作かどうかを設計時に意識するのが良いと感じています。操作名に特別な決まりをつけたり、編集中状態や有効な状態などの状態クラスを利用することで(少し大袈裟かもしれませんが)明示することも可能かなと思います。