Избегая обычного ORM по несущественным причинам, я пытаюсь написать класс, который может как представлять данные из БД, так и добавлять / обновлять данные (это в первую очередь хорошая идея?).
class Car (val _id:ID, val _name:String = "") {
def this(_id:ID) = {
val car = DB.fetchCar(_id)
this(_id,car.name)
}
def this(_name:String) = this(null,_name)
def isSynced:Boolean = { ... }
def sync { ... }
}
Это означает, что вы можете:
- зная и идентификатор и имя записи, создать объект, представляющий ее,
- зная только идентификатор записи, вы можете построитьобъект rep из DB и
- , если вы не предоставите идентификатор, ваш объект будет в несинхронизированном состоянии и синхронизируется после того, как произойдет добавление / обновление.
1-й конструктор зависит от операции с БД, поэтому Option [Car] в качестве возвращаемого типа имеет больше смысла.Но, насколько я вижу, Scala не позволяет вам делать что-то вроде:
def this(_id:ID):Option[Car] = {
try {
val car = DB.fetchCar(_id)
Some(this(_id,car.name))
} catch {
case e:Exception => None
}
}
Имеет ли это смысл?Как бы вы это реализовали?