假設您已經有一個歌曲的域模型類。 Song的節奏屬性(一個int)應該總是一個正數。這個需求是否應該是領域模型的一部分或者是外部的(比如在SongManager /業務邏輯層類中)?簡單域對象屬性值
比方說,你已經實現了它,像這樣:
class Song {
private int tempo;
// ...
public void setTempo(int tempo) {
if (tempo > 0) {
this.tempo = tempo;
} else {
// what?
}
}
}
你更換// what?
以上:
- 沒有。給定一個歌曲實例
s
,s.setTempo(-10)
不會修改對象的狀態。 - 將速度設置爲某個最小值,例如
1
。 - 馬克
setTempo
用的else
子句中籤throws InvalidTempoException
和throw
它。這樣,控制器或其他組件負責捕捉無效速度值,並決定如何處理異常。 - 拋出運行時 InvalidTempoException。
- 將節奏屬性提取到Tempo類中,其中封裝了「必須大於0」。
- 別的東西。
我問,因爲我最近一直在探索常見的「分層架構」方法,特別是領域層。
雖然#3的氣味是顯而易見的(不必趕鴨每'setTempo'調用的檢查除外)是有辦法利用這使得躲開例外本質上「冒泡」一些驗證層? – ybakos