后端服务器的Scala服务接口设计?

时间:2016-02-19 00:55:35

标签: scala design-patterns playframework slick

我正在Scala Playframework中编写后端restful api服务器,使用Slick进行数据库访问。

因为我的数据库模式一直在不断发展,所以我决定通过slick-codegen生成Slick帮助程序类。 Users表映射到此Scala案例类

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

现在我的数据访问包含2层:服务& DAO

DAO非常简单,允许从数据库中插入,删除等UserRow< / p>

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

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

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

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

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

1 个答案:

答案 0 :(得分:1)

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

  1. 数据库中的行。这是您生成的UserRow案例类,并与您的数据库耦合。这是您的DAO应该接受并返回的对象
  2. 模特。这是您的代码应该用于实现业务逻辑的抽象。您可以选择使用服务类创建精简模型(仅限字段)来实现业务逻辑,或者在模型上使用方法中的业务逻辑创建厚模型,仅管理事务和调用多个模型的服务层。
  3. API响应,即您实体的JSON表示。
  4. 所有这三个都应该单独创建。这将确保您的实施从长远来看是分离和清洁的。这并不意味着您将有3 *个数量的表对象浮动。每个表都有1行案例类,但是你的模型应该抽象出来,并且可能代表许多表的逻辑。 Json表示也可能因路线和/或来电者而异。