Songのドメインモデルクラスがあるとしましょう。曲には、常に正の数である必要があるテンポ属性(int)があります。この要件は、ドメインモデルの一部である必要がありますか、それとも外部(SongManager /ビジネスロジックレイヤークラスなど)である必要がありますか?
次のように実装することを選択したとしましょう。
class Song {
private int tempo;
// ...
public void setTempo(int tempo) {
if (tempo > 0) {
this.tempo = tempo;
} else {
// what?
}
}
}
// what?
上記を次のように置き換えますか?
- 何もない。Songインスタンスが与えられた場合
s
、s.setTempo(-10)
オブジェクトの状態を変更することはありません。 - テンポを最小値に設定します
1
。例: - 句にチェックマークを
setTempo
付けてマークします。このように、コントローラーまたは他のコンポーネントは、無効なテンポ値をキャッチし、例外の処理方法を決定する責任があります。throws InvalidTempoException
throw
else
- ランタイムInvalidTempoExceptionをスローします。
- tempo属性をTempoクラスに抽出し、そこに「0より大きくなければならない」をカプセル化します。
- 他の何か。
最近、一般的な「階層化アーキテクチャ」アプローチ、特にドメイン層を調査しているので、質問します。