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 InvalidTempoExceptionthrowelse - ランタイムInvalidTempoExceptionをスローします。
- tempo属性をTempoクラスに抽出し、そこに「0より大きくなければならない」をカプセル化します。
- 他の何か。
最近、一般的な「階層化アーキテクチャ」アプローチ、特にドメイン層を調査しているので、質問します。