Лучшие практики для проверки Акка упорство команды
Допустим, у нас есть команда AddUser
:
case class AddUser(username: String, password: String)
Как лучше всего проверить эту команду перед сохранением события? Делать это таким образом, например, кажется довольно грязным.
override def receiveCommand: Receive = {
case AddUser(username, password) =>
if (username.trim.length > 25) {
sender() ! UsernameTooLong
} else if (password.trim.length > 25) {
sender() ! PasswordTooLong
} else {
persist(UserAdded(User(username, password))) {
userAdded =>
sender() ! userAdded
}
}
}
1 ответ:
Вам нужно использовать шаблон приемного конвейера: http://doc.akka.io/docs/akka/2.4.1/contrib/receive-pipeline.html
Вы можете сделать что-то вроде этого:
PS: Я не компилировал и не тестировал этот код, но я верю, что он будет работать, если есть какие-либо проблемы, дайте мне знать.trait AuthenticatedUser { this: ReceivePipeline => pipelineInner { case msg@AddUser(username, password) => if (username.trim.length > 25) { sender() ! UsernameTooLong } else if (password.trim.length > 25) { sender() ! PasswordTooLong } else { Inner(msg) } case msg => Inner(msg) } } class UserActor extends Actor with ReceivePipeline with AuthenticatedUser { def receive = { case AddUser(username, password) => persist(UserAdded(User(username, password))) { userAdded => sender() ! userAdded } } }