2014-02-23 4 views
0

Я новичок и в Scala & Playframework и пытаюсь понять эту идею использования Option[Long] или Option[Int] в классах. Для примера, я вижу это много:Scala: "id: Option [Long]"?

case class User(id: Option[Long], 
    name: String) 

Почему я, используя Option[Long] вместо того, чтобы просто Long, если это необходимо? Как я буду автоматически увеличивать Long (а не Option[Long]) при вставке нового пользователя?

Кроме того, я не слишком хорошо знаком с концепцией фьючерсов и обещаний, но может ли это быть использовано?

пса жаль, если эти тупые вопросы

ответ

2

Почему я использую опцию [Long]? Поскольку идентификатор будет автоматически сгенерирован, то есть вы не знаете, что такое идентификатор, поэтому вы не можете его установить. Вы создаете пользователя (None, «SomeName»), и после того, как вы его сохраните, идентификатор будет заполнен вашим уровнем персистентности (который читает его из БД).

Будущее - это оболочка для вычисления, которое произойдет асинхронно. Promise - это объект, который позволяет вам сообщать, что вычисление завершилось успешно со значением или завершилось с исключением. Вы можете думать об этом как обертке для «некоторых вычислений, которые могут быть успешными или неудачными».

+1

Кажется, это неудобный подход. В идеале вы должны иметь «Option [Long]» при создании и «Long» при чтении. Я понимаю, что это сложно, когда это база данных, создающая «длинный» вопрос, но по-прежнему кажется субоптимальным иметь дело с «Нет», когда он будет «Некотовым» после его загрузки из базы данных. –

+0

@MysteriousDan вы правы, и вы можете попробовать, если полностью исключает идентификатор пользователя. Вы всегда можете использовать (длинный, пользовательский) кортеж, когда вам это нужно, или создать другой класс класса SaveUser (id: Long, user: User) или даже подумать об общем классе класса Saved [Model]. Если ваш макет данных не подходит, измените его, пока он не станет идеально. –

0

Причины для использования в Option типа для id поля является возможность создания переходного объекта. Если вы создаете нового пользователя, вам необходимо создать экземпляр User до того, как он присвоит базу данных id. В этом случае вы должны создать его как User(None, "bob").

Смежные вопросы