scala - Play 2.0 模型最佳实践

标签 scala model playframework playframework-2.0

我正在寻找关于模型和使用 play 2.0 在数据库中持久化对象的方法的最佳实践。我已经使用 Scala 研究了 play 2.0 的 Play 和 typesafe 示例。

我的理解是:

  • 该模型在案例类
  • 中定义
  • 所有的插入/更新/删除/选择都在这个案例类的伴随对象中定义

  • 所以如果我需要更新我的 Car 对象来定义一个新的所有者,我将不得不这样做:
    val updatedCar = myCar.copy(owner=newOwner)
    Car.update(updatedCar)
    // or
    Car.updateOwner(myCar.id.get, newOwner)
    

    我想知道为什么更新或删除语句不在 case 类本身中:
    case class Car(id: Pk[Long] = NotAssigned, owner: String) {
        def updateOwner(newOwner: String) {
            DB.withConnection { implicit connection =>
                SQL(
                    """
                    update car
                    set owner = {newOwner}
                    where id = {id}
                    """
                ).on(
                    'id -> id,
                    'newOwner -> newOwner
                ).executeUpdate()
            }
            copy(owner = newOwner)
        }
    }
    

    这样做将允许:
    val updatedCar = myCar.updateOwner(newOwner)
    

    这就是我过去使用 Java 和 JPA 在 Play 1.X 中所做的。
    也许原因很明显,并且由于我对 Scala 的了解很少。

    最佳答案

    我认为部分原因是喜欢 Scala 等函数式语言的不变性。

    在您的示例中,您修改了“this.owner”。删除的等效操作是什么样的,“这个”会发生什么?

    有了伴生对象,传递过来的对象(或ID)没有被修改,返回的对象或ID就是操作的相关结果,似乎更清楚一点。

    然后,我认为问题的另一部分是您的示例首先需要一个实例。当您删除一个对象时,如果您只想通过 Id 删除您从表单中删除的内容,并且不想首先构建您打算删除的对象的整个实例,该怎么办?

    我一直在用 mongo 玩 play2.0,我的同伴对象看起来像:

    object MyObject extends SalatDAO[MyObject,ObjectId] (collection = getCollection("objectcollection")) {
    }

    这些伴随对象从 SalatDAO(MyObject.save()、MyObject.find() 等)继承了 CRUD 之类的操作。我不完全清楚它是如何在内部实现的,但它运行良好。

    关于scala - Play 2.0 模型最佳实践,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10533225/

    相关文章:

    在哈希表上使用 get() 方法时的 scala 速度? (是否生成临时 Option() 对象?)

    java - 这个scala代码是做什么的?

    ruby-on-rails - 从一个模型访问另一个模型

    asp.net-mvc - MVC最佳实践: Where to do mapping between models

    scala - 构建 play 2.0 项目时 Unresolved 依赖关系

    scala - Scala是否具有少量的潜在语法功能?

    scala - 将 Spark DataSet 行值映射到新的哈希列

    python - 循环 View 中的模型对象字段

    Scala Play框架 Controller ,JSON和案例类之间的转换

    java - Play Framework 异常 - 字段 .. 没有默认值