principle-model-the-domain について
条件分岐に散在するのではなく、データ構造でドメインルールを表す開発向けスキルです。無効な状態を防ぎつつ、複雑さを減らさない抽象化を避ける指針を示します。
主な機能
- 01構造でドメインルールを表現
- 02ステートマシンと型付きモデルの活用
- 03レジストリで分散した分岐を置換
- 04効果の乏しい抽象化を回避
活用シーン
- 01増え続ける条件分岐の再構成
- 02ライフサイクルと状態制約の表現
インストール
コマンドをコピーしてターミナルで実行します。
$
npx skills add https:/ / github.com/ backnotprop/ pstack --skill principle-model-the-domainインストール後、Claude Code で/principle-model-the-domainを入力して読み込まれたか確認します。
詳細
ドメインをモデル化する
ドメインの実態を条件分岐に散在させるのではなく、データ構造にエンコードします。ドメインに合った構造にすると、無効な状態を表現できなくなり、分岐もなくなります。書き込み時に構造を選ぶのは簡単です。後から修正するとなるとリファクタリングのように感じられ、先送りされます。
次のような方法を検討してください。
- 散在するブール値、フェーズ、ライフサイクルチェックの代わりに、ステートマシンを使います。
- 緩やかなパラメーターや繰り返される形状の前提の代わりに、型付きモデルを使います。
- 複数のファイルに分散した分岐の代わりに、マップ、レジストリ、ルックアップテーブル、または判別可能なユニオンを使います。
- その場しのぎの状態変更の代わりに、リデューサーまたはコマンド/イベントモデルを使います。
- load、validate、transform、save のような手順ではなく、ドメイン知識のまとまりを軸にモジュールを構成します。実行順序は責務の所在ではありません。
- 繰り返される振る舞い、責務、または不変条件をまとめる、小さなモジュール境界を設けます。
- アクセスパターンに応じて、キュー、キャッシュ、インデックス、グラフ、ツリー、または正規化されたコレクションを使います。
- ほかにも、適合する構造を使います。適合するものがない場合は、コードで絶対に許してはならないことと、データの読み取られ方を整理し、それらを正確に表現する構造を見つけます。
抽象化を無理に導入しないでください。現在の形がすでに明快で、局所的に完結しており、今後大きくなる可能性も低いなら、退屈なコードを選んでください。分岐、重複したルール、無効な状態、ライフサイクル上のリスクを減らさずに間接性を増やす抽象化には、懐疑的であるべきです。
これを怠った兆候は、新機能によって既存の if/else チェーンに分岐が一つ追加されたり、最初のブール値と同期させる必要がある二つ目のブール値が追加されたりすることです。時間軸に沿った分解も、もう一つの兆候です。フェーズ名を付けたモジュールでは、同じドメインルールが各ステップで繰り返されます。
コメント
Markdown 対応