Один и тот же класс случая другой проверки - PullRequest
0 голосов
/ 03 сентября 2018

То, что я пытаюсь сделать в Scala 2.11, и у akka есть один класс дел, но две разные проверки, основанные на том, какой маршрут пробивается.

Например, давайте рассмотрим класс case ниже

case class User(_id: String, name: String, age: Int, address: String)

Теперь, пока проложен маршрут /create, мне не нужно _id, но мне нужны все остальные поля.

Но пока проложен маршрут /update, мне нужны _id и поля, которые должны быть обновлены (это может быть одно или все три)

Только объявление Option не служит цели, потому что тогда мой /create маршрут идет на бросок.

Даже расширение case-классов на самом деле не работает без проблем (слишком много дублирования кода).

Я бы с удовольствием, если бы что-то подобное было возможно

case class User(_id: String, name: String, age: Int, address: String)

case class SaveUser() extends User {
    require(name.nonEmpty)
    require(age.nonEmpty)
    require(address.nonEmpty)
}

case class UpdateUser() extends User {
    require(_id.nonEmpty)
}

Есть ли элегантное решение для этого? Или мне нужно создать два одинаковых класса case?

1 Ответ

0 голосов
/ 03 сентября 2018

Мое предложение будет заключаться в том, чтобы кодировать разные классы дел для разных требований, но если вы настаиваете на том, что должны делить код между этими двумя делами, возможное решение будет параметризовать класс дел

case class User[Id[_], Param[_]](_id: Id[String], name: Param[String], age: Param[Int], address: Param[String])

Затем вы определяете псевдоним для конструктора типа Identity и ваши два использования класса case

type Identity[T] = T
type SaveUser = User[Option, Identity]
type UpdateUser = User[Identity, Option]
...