Вы на самом деле не проясняете, что такое «база» в этом контексте, но, учитывая ваше описание, это звучит так, будто это действительно не что иное, как фабрика для пользователей.
Обычное место, где можно поставить фабрику длякласс находится в объекте-компаньоне (это то, как это делают классы case, но техника не ограничивается просто классами case)
class User private(val id: Int, val name: String) {
...
}
object User {
private def nextId() : Int = ...
def apply(name: String) = new User(nextId(), name)
}
//now create one:
val u = User("Ivan")
Конечно, если объект Userявляется неизменным (настоятельно рекомендуется), тогда есть очень мало причин, чтобы скрыть элемент id.Вы, вероятно, также захотите, чтобы (ограниченный) метод создавал User
с указанным идентификатором, в основном по причинам модульного тестирования.
Работая с такими спутниками, маловероятно, что вывсе еще нужна отдельная фабрика UserBase
.Если ваша фабрика будет названа так же, как и экземпляры, которые она производит, будет получен более чистый код.