現実世界の概念とコードがずれなく表現できていれば(DDD)、 コードが仕様書になるのでドメイン知識のルールは必要性が減る /** * タスク * ステータスは未着手 →進行中→完了の順に遷移する */ class Task( val projectId: ProjectId, val title: TaskTitle, val descritption: TaskDescription, val status: TaskStatus, val comments: List<Comment>, ) enum class TaskStatus { TODO, IN_PROGRESS, DONE, } そもそもコードに仕様を 書けばいい