假设您有一个 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”。
- 别的东西。
我问是因为我最近一直在探索常见的“分层架构”方法,尤其是领域层。