我目前的项目是使用Java。我们将业务逻辑推送到代表特定状态(新的,已注册的等)的枚举。在scala中,我只是想知道使用case对象作为状态是一个好主意吗?有什么缺点。
一个简单的例子
trait State {
def read() : Try[String] = {
Failure(new IllegalStateException("too young to read"))
}
}
case object child extends State
case object young extends State {
override def read() : Try[String] = {
Success("young people read book")
}
}
case object elder extends State {
override def read() : Try[String] = {
Success("elder people read book")
}
}
class Person(state : State) {
def read() : Try[String] = {
state.read()
}
}
答案 0 :(得分:5)
它可以并且实际上它是非常常见的模式(顺便提到密封特性),但是实现我见过通常会将任何操作移出状态并使用{{1} }作为表示当前状态的标签,以及可能存储某些状态数据的案例类:
case objects
使用案例类来存储数据(而不是将其存储在普通的旧类字段中)的推理是,不同的状态可能具有不同的变量集,而使用案例类则更容易理解当前的工作集