В Scala, какой самый идиоматичный способ назвать класс case эквивалентом класса ORM?
Я должен работать с Lift's Mapper (я знаю, что могут быть лучшие ORM для Scala, но я не могу изменить это прямо сейчас). Как правило, с помощью Mapper таблица определяется следующим образом:
package com.sample.model
import net.liftweb.mapper._
class Table extends LongKeyedMapper[Table] with IdPK {
def getSingleton = Table
object other_table_id extends MappedLongForeignKey(this, OtherTable)
object date_field extends MappedDate(this)
object string_field extends MappedString(this, 255)
def toCaseClass = ...
}
object Table extends Table with LongKeyedMetaMapper[Table]
Теперь я бы хотел определить класс case для Table, чтобы легче манипулировать записями, поскольку Mapper не очень "идиоматичен для Scala", не очень безопасен для типов и определенно не является неизменным. Мой класс case будет выглядеть так:
case class TableCC(id: Long, otherTableId: Long, dateField: Option[Date], ...) {
def toMapper = ...
}
Как мне назвать класс кейса и куда его поместить?
- В com.sample.model с другим именем (TableCC или TableCaseClass)?
- В другой упаковке (например, com.sample.model.caseclass) с тем же именем (таблица)?
- В таблице объект?
- ...?
1 ответ
Во-первых, я знаю, что вы сказали, что вы не можете использовать другой ORM, но есть ORM на основе класса дел, которые работают очень хорошо. (Slick работает в основном так, как и некоторые другие)
Лично, если вы собираетесь использовать этот case-класс в качестве основного способа манипулирования доменом, я бы поместил их в собственный пакет. Таким образом, если вы управляете доменом, вы можете сделать
import com.sample.model.caseclass._
Несколько замечаний:
Не называйте его так же, как класс case, это сбивает с толку, и я гарантирую, что в какой-то момент вы захотите использовать оба класса в одном файле, и в этом случае вам придется использовать псевдоним одного из них.
Я бы использовал названия, такие как Table и TableCC. Таким образом, в вашей IDE вы можете легко найти один или другой.