在Scala,什么';将案例类命名为与ORM类等效的最惯用的方法是什么?

在Scala,什么';将案例类命名为与ORM类等效的最惯用的方法是什么?,scala,lift,Scala,Lift,我必须使用Lift的Mapper(我知道Scala可能有更好的ORMs,但我现在没有能力改变)。通常,使用Mapper,表的定义方式如下: package com.sample.model import net.liftweb.mapper._ class Table extends LongKeyedMapper[Table] with IdPK { def getSingleton = Table object other_table_id extends MappedLong

我必须使用Lift的Mapper(我知道Scala可能有更好的ORMs,但我现在没有能力改变)。通常,使用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定义一个case类,以便更容易地操作记录,因为Mapper不是非常“Scala惯用”,不是非常类型安全,而且肯定不是不可变的。我的案例类将如下所示:

case class TableCC(id: Long, otherTableId: Long, dateField: Option[Date], ...) {
  def toMapper = ...
}
我应该如何命名case类以及应该将其放在哪里

  • 在com.sample.model中使用其他名称(TableCC或TableCaseClass)
  • 是否在具有相同名称(表)的不同包(例如com.sample.model.caseclass)中
  • 在表对象中

  • 首先,我知道你说过你不能使用另一个ORM,但是scala有一些基于实例类的ORM,它们工作得很好。(Slick基本上就是这样工作的,其他一些也一样)

    就个人而言,如果您打算使用这个case类作为操作域的主要方式,我会将它们都放在自己的包中。这样,如果你正在制作域名,你可以做一个

    import com.sample.model.caseclass._
    
    需要注意的几点:

    不要将其命名为case类,这会让人困惑,我保证在某个时候,您会希望在同一个文件中使用这两个类,在这种情况下,您必须将其中一个命名为别名

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