2

我必须使用 Lift 的 Mapper(我知道 Scala 可能有更好的 ORM,但这不是我现在有权改变的东西)。通常,使用 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]

现在我想为 Table 定义一个案例类以更轻松地操作记录,因为 Mapper 不是很“Scala-惯用”,不是很安全,而且绝对不是不可变的。我的案例类看起来像这样:

case class TableCC(id: Long, otherTableId: Long, dateField: Option[Date], ...) {
  def toMapper = ...
}

我应该如何命名案例类,我应该把它放在哪里?

  1. 在具有不同名称(TableCC 或 TableCaseClass)的 com.sample.model 中?
  2. 在具有相同名称(表)的不同包(例如 com.sample.model.caseclass)中?
  3. 在表对象中?
  4. ...?
4

1 回答 1

2

首先,我知道你说过你不能使用另一个 ORM,但是有一些基于案例类的 scala 的 ORM 可以很好地工作。(Slick 基本上是这样工作的,其他一些也是如此)

就个人而言,如果您打算使用这个案例类作为操作域的主要方式,我会将它们全部放在自己的包中。这样,如果您正在操作域,您可以执行

import com.sample.model.caseclass._

需要注意的几点:

不要将其命名为与案例类相同的名称,这会让人感到困惑,我保证在某些时候你会想要在同一个文件中使用这两个类,在这种情况下你将不得不为其中一个类命名。

我会使用像 Table 和 TableCC 这样的命名。这样,在您的 IDE 中,您可以轻松找到其中一个。

于 2012-11-08T14:58:19.940 回答