我的 DAO 类中处理文件夹的所有方法(Web 应用程序是关于云存储的,如谷歌驱动器)都将 User 作为第一个参数。使用此参数以便当前用户只能访问他或她拥有的文件夹。
一些例子:
class FolderDAO {
def findRoot(user: User): Future[Option[DBFolder]] = { /* implementation */}
def findById(user: User, folderId: Long): Future[Option[DBFolder]] = { /* implementation */}
def findChildren(user: User, folder: DBFolder): Future[List[DBFolder]] = { /* implementation */}
}
等等。
有可能有一天我需要一种不需要用户参数的方法,但它仍然是少数。
正如您可能想象的那样,使用这些方法非常麻烦。
我确定了该问题的 3 个解决方案:
- 保持原样,因为可读性最重要
- 用户服务存储当前用户并且所有其他服务(和 DAO)都可以访问(这看起来像一个全局变量,但服务是可注入的,所以测试是可以的)
- 这些方法的隐式用户参数
带有隐式:
def findRoot()(implicit user: User): Future[Option[DBFolder]]
def findById(folderId: Long)(implicit user: User): Future[Option[DBFolder]]
def findChildren(folder: DBFolder)(implicit user: User): Future[List[DBFolder]]
您认为这里最好的选择是什么?
这篇StackOverflow 帖子对这个问题提供了一些见解,但没有太大帮助,不幸的是