В 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 = ...
}

Как мне назвать класс кейса и куда его поместить?

  1. В com.sample.model с другим именем (TableCC или TableCaseClass)?
  2. В другой упаковке (например, com.sample.model.caseclass) с тем же именем (таблица)?
  3. В таблице объект?
  4. ...?

1 ответ

Решение

Во-первых, я знаю, что вы сказали, что вы не можете использовать другой ORM, но есть ORM на основе класса дел, которые работают очень хорошо. (Slick работает в основном так, как и некоторые другие)

Лично, если вы собираетесь использовать этот case-класс в качестве основного способа манипулирования доменом, я бы поместил их в собственный пакет. Таким образом, если вы управляете доменом, вы можете сделать

import com.sample.model.caseclass._

Несколько замечаний:

Не называйте его так же, как класс case, это сбивает с толку, и я гарантирую, что в какой-то момент вы захотите использовать оба класса в одном файле, и в этом случае вам придется использовать псевдоним одного из них.

Я бы использовал названия, такие как Table и TableCC. Таким образом, в вашей IDE вы можете легко найти один или другой.

Другие вопросы по тегам