階層化された構造制約

前の「構造制約を満たしていると確認されていない状態」については、もう少しうまく取り扱えないかなと考えてみました。
そこで思いついたのが、「あるモデルにおいて1つの固定的な構造制約を満たしているかどうか」と考えるよりは、「構造制約にも階層があってどの階層まで検証された状態」ととらえる方法です。階層として、

  1. 属性レベル
  2. クラスレベル
  3. コンポーネントレベル
  4. ドメインモデルレベル

を考えて、下位レベルの制約をより上位のレベルで操作するためには必須条件として考えると、どの操作でどの構造制約をまで前提にしてよく、また、どの構造制約を新たに検証する必要があるか整理しやすくなると考えています。

たとえば、適用期間の制約として、属性レベルでは適用期間の開始日・終了日が「日付型」か、クラスレベルでは「開始日<=終了日」、ドメインモデルレベルは「終了日-開始日<期限上限」などのようにより厳しい制約が適用されるようになります。これにより、適用期間オブジェクトの操作においてはクラスレベルの構造制約を前提することができいちいち「開始日<=終了日」を検証する必要はなくなり、さらにドメインモデルに組み込まれた適用期間は「終了日-開始日<期限上限」を満たしていることを前提に他のコントローラクラスなどから利用することができます。