【问题标题】:In Scala, what's the most idiomatic way to name the case class equivalent of an ORM class?在 Scala 中,命名与 ORM 类等效的案例类的最惯用方式是什么?
【发布时间】:2012-11-08 08:28:46
【问题描述】:

我必须使用 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. 在 Table 对象中?
  4. ...?

【问题讨论】:

    标签: scala lift


    【解决方案1】:

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

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

    import com.sample.model.caseclass._
    

    注意几点:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-02-17
      • 2011-09-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多