在Scala中,用于命名等同于ORM类的案例类的最常用的方法是什么?

时间:2012-11-08 08:28:46

标签: scala lift

我必须使用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-idiomatic”,不是非常类型安全的,绝对不是不可变的。我的案例类看起来像这样:

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

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

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

1 个答案:

答案 0 :(得分:2)

首先,我知道你说你不能使用另一个ORM但是有一些基于案例类的ORM for scala非常好用。 (光滑的工作基本上就像这样,其他几个也是如此)

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

import com.sample.model.caseclass._

需要注意几点:

不要将它命名为与case类相同的东西,这会让人感到困惑,我保证在某些时候你会想要在同一个文件中使用这两个类,在这种情况下你必须为它们中的一个添加别名。

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