后端服务器的 Scala 服务接口设计?
Scala service interface design for a backend server?
我正在 Scala Playframework 中编写后端 restful api 服务器,使用 Slick 进行数据库访问。
因为我的数据库架构一直在发展,所以我决定通过 slick-codegen 生成 Slick 助手 classes。用户 table 映射到此 Scala 案例 class
case class UserRow(userId: Long, username: String, passwordHash: String,
passwordSalt: String, email: String, firstName: String, ...)
现在我的数据访问由两层组成:服务和 DAO
DAO 非常简单,允许在数据库中插入、删除等 UserRow
现在我的问题开始于应用程序控制器调用的服务层设计。
例如,如果它的 show(id) 方法 return 一个 UserRow,我会显示用户的私人盐和密码哈希。另一方面,这种方法可以让我轻松地将它们包装进出 JSON。
另一种方法是将 show 方法(仅用作示例)return 包含数据的元组,但这对 json 传输不方便。
此外,我可以创建一个额外的用户 class,但这会在很长一段时间内创建大量样板文件 运行
处理这种情况的正确方法是什么?以后哪里可以找到推荐和智能模式?
似乎有三个概念需要表示 -
- 数据库中的行。这是您生成的 UserRow 案例 class 并与您的数据库相结合。这是您的 DAO 应该接受和返回的对象
- 模型。这是您的代码应该用于实现业务逻辑的抽象。您可以选择使用服务 classes 创建一个薄模型(仅字段)来实现业务逻辑,或者使用模型方法中的业务逻辑创建厚模型,而服务层仅管理事务和调用多个模型。
- API 响应,即您的实体的 JSON 表示。
所有这三个都应该单独创建。这将确保您的实现在很长的 运行 中是解耦和干净的。这并不意味着您将有 3* 个 tables 对象漂浮在周围。对于每个 table,您将有 1 个行案例 class,但是您的模型应该将其抽象出来,并且可能代表许多 table 的逻辑。 Json 表示也可能因路由 and/or 呼叫者而异。
我正在 Scala Playframework 中编写后端 restful api 服务器,使用 Slick 进行数据库访问。
因为我的数据库架构一直在发展,所以我决定通过 slick-codegen 生成 Slick 助手 classes。用户 table 映射到此 Scala 案例 class
case class UserRow(userId: Long, username: String, passwordHash: String,
passwordSalt: String, email: String, firstName: String, ...)
现在我的数据访问由两层组成:服务和 DAO
DAO 非常简单,允许在数据库中插入、删除等 UserRow
现在我的问题开始于应用程序控制器调用的服务层设计。
例如,如果它的 show(id) 方法 return 一个 UserRow,我会显示用户的私人盐和密码哈希。另一方面,这种方法可以让我轻松地将它们包装进出 JSON。
另一种方法是将 show 方法(仅用作示例)return 包含数据的元组,但这对 json 传输不方便。
此外,我可以创建一个额外的用户 class,但这会在很长一段时间内创建大量样板文件 运行
处理这种情况的正确方法是什么?以后哪里可以找到推荐和智能模式?
似乎有三个概念需要表示 -
- 数据库中的行。这是您生成的 UserRow 案例 class 并与您的数据库相结合。这是您的 DAO 应该接受和返回的对象
- 模型。这是您的代码应该用于实现业务逻辑的抽象。您可以选择使用服务 classes 创建一个薄模型(仅字段)来实现业务逻辑,或者使用模型方法中的业务逻辑创建厚模型,而服务层仅管理事务和调用多个模型。
- API 响应,即您的实体的 JSON 表示。
所有这三个都应该单独创建。这将确保您的实现在很长的 运行 中是解耦和干净的。这并不意味着您将有 3* 个 tables 对象漂浮在周围。对于每个 table,您将有 1 个行案例 class,但是您的模型应该将其抽象出来,并且可能代表许多 table 的逻辑。 Json 表示也可能因路由 and/or 呼叫者而异。