这可能有点鸡和鸡蛋的问题,但这是情况,我想听听你的意见.
有一个简单的case class例子
case class Person(id:Option[Int],firstName:Option[String] ...)
Run Code Online (Sandbox Code Playgroud)
现在Slick Table类看起来如下
class Person(tag: Tag) extends Table[Person](tag, "person") {
def * = (id?, firstName) <> ((Person.apply _).tupled, Person.unapply)
def id = column[Int]("id", O.AutoInc, O.PrimaryKey)
Run Code Online (Sandbox Code Playgroud)
现在之所以将id其定义为Optiona,case class是因为Person在app中的其他位置使用了相同的类.例如JSON,在控制器层中序列化/反序列化.当请求进入创建新记录时,显然id不会在传入中传递JSON.同时,当一个人试图从案例类中检索值时Option,id可能会误导,id因为那不是一个可选字段.IMO,当我看到Option类型我认为这可能有None或Some但在这种情况下它总是有一个值,来自Slick/db,所以定义它Option是误导性的.
我可以将它定义为case class Person(id : SOME_CONST_NUM, firstName :Option[String] ..)每当你将其传递给Slick进行插入时,Slick将插入一个PK值.从Person您Person.id那里检索数据总是可以获得Slick为您提供的价值.用法明智,这是明确和更合适的.但是,这个硬编码的默认设置SOME_CONST_NUM是丑陋和代码味道.
id在这种情况下,您如何定义字段?
| 归档时间: |
|
| 查看次数: |
777 次 |
| 最近记录: |