这是一个很好的问题,
你把它们放在应用层。您寻求的模式称为查询服务。
看看 Vaughn Vernon(实现领域驱动设计的作者)在他的 github 存储库中的表现:
https://github.com/VaughnVernon/IDDD_Samples/tree/master/iddd_collaboration/src/main/java/com/saasovation/collaboration/application/forum/data
然后他直接从数据库中的查询服务 (CQRS) 填充它们:
public ForumDiscussionsData forumDiscussionsDataOfId(String aTenantId, String aForumId) {
return this.queryObject(
ForumDiscussionsData.class,
"select "
+ "forum.closed, forum.creator_email_address, forum.creator_identity, "
+ "forum.creator_name, forum.description, forum.exclusive_owner, forum.forum_id, "
+ "forum.moderator_email_address, forum.moderator_identity, forum.moderator_name, "
+ "forum.subject, forum.tenant_id, "
+ "disc.author_email_address as o_discussions_author_email_address, "
+ "disc.author_identity as o_discussions_author_identity, "
+ "disc.author_name as o_discussions_author_name, "
+ "disc.closed as o_discussions_closed, "
+ "disc.discussion_id as o_discussions_discussion_id, "
+ "disc.exclusive_owner as o_discussions_exclusive_owner, "
+ "disc.forum_id as o_discussions_forum_id, "
+ "disc.subject as o_discussions_subject, "
+ "disc.tenant_id as o_discussions_tenant_id "
+ "from tbl_vw_forum as forum left outer join tbl_vw_discussion as disc "
+ " on forum.forum_id = disc.forum_id "
+ "where (forum.tenant_id = ? and forum.forum_id = ?)",
new JoinOn("forum_id", "o_discussions_forum_id"),
aTenantId,
aForumId);
}