【问题标题】:Scala service interface design for a backend server?后端服务器的Scala服务接口设计?
【发布时间】:2016-05-31 10:37:25
【问题描述】:

我正在使用 Slick 在 Scala Playframework 中编写一个后端 RESTful API 服务器来访问数据库。

因为我的数据库架构一直在发展,我决定通过 slick-codegen 生成 Slick 帮助程序类。用户表映射到这个 Scala 案例类

case class UserRow(userId: Long, username: String, passwordHash: String,
passwordSalt: String, email: String, firstName: String, ...)

现在我的数据访问由 2 层组成:服务和 DAO

DAO 非常简单,允许在数据库中插入、删除等 UserRow

现在我的问题从应用程序控制器调用的服务层设计开始。

如果例如它的 show(id) 方法将返回一个 UserRow,我将显示用户的私有盐和密码哈希。另一方面,这种方法可以让我轻松地将它们包装进和包装出 JSON。

另一种方法是 show 方法(仅用作示例)返回一个包含数据的元组,但这对于 json 传输会很不方便。

另外,我可以创建一个额外的 User 类,但从长远来看这会产生大量的样板文件

处理这种情况的正确方法是什么?以后在哪里可以找到推荐的智能模式?

【问题讨论】:

    标签: scala design-patterns playframework slick


    【解决方案1】:

    似乎有三个概念需要表示 -

    1. 数据库中的行。这是您生成的 UserRow 案例类,并与您的数据库相结合。这是您的 DAO 应该接受和返回的对象
    2. 模型。这是您的代码应该用于实现业务逻辑的抽象。您可以选择创建带有服务类的瘦模型(仅字段)来实现业务逻辑,或者创建带有模型方法中业务逻辑的厚模型,并且服务层只管理事务并调用多个模型。
    3. API 响应,即您的实体的 JSON 表示。

    这三个都应该单独创建。从长远来看,这将确保您的实现是解耦和干净的。这并不意味着您将有 3*number 个表对象浮动。每个表都有 1 个 Row 案例类,但您的模型应该将其抽象出来,并可能代表许多表的逻辑。 Json 表示也可能因路由和/或调用者而异。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-01-04
      • 2014-04-19
      • 2021-02-09
      • 1970-01-01
      • 2012-07-11
      • 1970-01-01
      • 1970-01-01
      • 2012-12-29
      相关资源
      最近更新 更多