我目前正在尝试围绕领域驱动设计、实体、服务、存储库构建我的应用程序...
所有基本的 crud 操作都很简单,基本上 1 个实体 => 1 个表 => 1 个存储库 => 1 个服务
但我想不出处理两个实体之间连接表的最干净的方法。
可以通过联接内部的表进行 1 次查询,这将是“干净的”(可以这么说),但效率不高,因为简单的联接会导致一次查询。
在这种模式下,表连接在哪里?
我一直在考虑现在构建可以封装答案的实体,但这会有效地为 1 个查询创建 1 个实体 + 存储库......
我还认为将多个实体合并到一个界面中可能会部分解决它,但它会导致我的实体出现许多空参数(在执行连接时很少需要来自所有标签的 ALL 字段)
解决这个问题的正确方法/模式是什么,适合 DDD 或至少是干净的?
-- 编辑示例:
type User struct {
ID int `db:"id"`
ProjectID int `db:"project_id"`
RoleID int `db:"role_id"`
Email string `db:"email"`
FirstName string `db:"first_name"`
LastName string `db:"last_name"`
Password string `db:"password"`
}
type UserRepository interface {
FindById(int) (*User, error)
FindByEmail(string) (*User, error)
Create(user *User) error
Update(user *User) error
Delete(int) errorr
}
type Project struct {
ID int `db:"id"``
Name string `db:"name"`
Description string `db:"description"`
}
在这里,我有一个简单的用户存储库。我对“项目”表有类似的东西。可以创建表,获取项目的所有信息,删除等。
如您所见,UserID 具有其所属项目 ID 的外键。
我的问题是当我需要从用户那里检索所有信息时,说“项目名称”和描述。(我现实表/实体有更多的参数)
我需要在 user.project_id 和 project.id 中做一个简单的连接,并在一个查询中检索用户 + 项目名称 + 描述的所有信息。
有时它更复杂,因为会有 3-4 个实体像这样链接。(用户、项目、项目附加信息、角色等)
当然,我可以进行 N 个查询,每个实体一个。
user := userRepo.Find(user_id)
project := projectRepo.FindByuser(user.deal_id)
这将“工作”,但我试图找到一种方法在一个查询中做到这一点。因为 user.project_id 和 project.id 上的简单 sql 连接会在查询中为我提供所有数据。
温温酱
繁花如伊
相关分类