Southerはドメイン分析で見つけた制約と状態遷移を実行可能なモデルにする

ドメイン分析で「申請額は負にならない」「申請は下書きから提出済みか却下へ遷移する」と見つけても、そのまま実装の制約になるとは限らない。 型の外側にある検証や例外処理へ分散すると、値を作る経路が増えるほど、分析で得た知識を破る実装が入り込む。

Souther は、業務データの値制約と状態遷移を記述し、Java から利用する型と振る舞いを生成する JVM 言語である。 `invariant` はデータを構築するたびに検査され、`behavior` は入力と業務上あり得る出力を宣言する。 たとえば却下を例外ではなく `Rejected` という業務上の値として返せば、提出が成功する場合と却下される場合を同じ状態遷移の選択肢として扱える。

この設計によって、ドメイン分析の成果は設計時だけの説明ではなく、実装が満たすべき境界になる。 ただし、Souther がドメイン分析を代行するわけではない。 何を値制約にするか、どの状態を区別するか、どの分岐が業務上の結果かは、利用者が分析によって決める必要がある。 Souther はその決定を、生成された型の外から破りにくくする。

データベース、時刻、外部サービスのような副作用は Java 側から注入する。 そのため、純粋な業務計算と外部世界との境界もモデルに現れる。 分析では「現在時刻を得る」「承認済みにする」という二つを同じ操作として扱わず、前者を依存、後者を業務上の振る舞いとして分けられる。

https://github.com/kawasima/souther

#domain-analysis #domain-model #souther #evergreen-note

created 2026-08-22 · updated 2026-08-22