首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >包含来自多个有界上下文的数据的对象列表

包含来自多个有界上下文的数据的对象列表
EN

Stack Overflow用户
提问于 2015-01-21 22:15:58
回答 1查看 130关注 0票数 0

首先,我是DDD的新手,所以我可能会弄错一些概念。

我所面临的问题如下:

我有一个处理系统的工单清单。票证基于爬虫系统抓取/跟踪的来自外部源的数据。

显然,这两个是独立的有界上下文。至于现在,我非常确定,我的边界在这里是正确的,因为它们几乎没有共同点(ticket连接到外部源,但它们是单独处理和更新的,并且以不同的方式)。

现在,我想创建一个包含所有票证的票证列表。每个票据都有来自一个有界上下文(可用操作等)的一些数据和来自另一个上下文(外部数据的图形表示)的一些数据。

我已经知道,为了避免数据重复,我可能会使用每个票据的复合视图,其中每个有界上下文呈现自己的UI部分。我见过亚马逊网站的分解。我们还假设,我的模板框架允许我使用块或组件来组成票证视图。

问题所在

我正在努力寻找一种方法来在应用程序中检索这些视图/ UI部件,而不需要太多的查询。我不想为每个组件发出一个请求,以避免N+1查询地狱(即使这些查询位于某个NoSQL缓存中)。我想象一下,我的视图控制器以某种方式请求两个绑定上下文提供控件列表,然后呈现它们(例如,一个根据搜索条件检索票据列表,另一个基于外部内容ID列表检索外部内容)。但我不确定我是否在正确的轨道上。

任何语言(伪语言)的代码示例都是非常受欢迎的。

EN

回答 1

Stack Overflow用户

发布于 2015-01-22 05:41:16

我认为你在正确的轨道上。

正如您所写的,您可以使用服务创建某种视图模型(视图实体),该服务只查询一次一个源和第二个(外部)源。然后,它将它们合并到单视图模型中,该模型将传递到UI层。

这样,您还可以在域层中保持数据合并的逻辑。在表示层中,您可以像处理普通视图模型(实体)一样使用它们,而不会泄露诸如它们的源、如何合并它们等信息。

一旦进入域层,您也可以添加本地缓存(如果需要)。

代码语言:javascript
运行
复制
<?php

class ViewTicketProvider
{
    private $externalService;

    public function __construct(ExternalProviderInterface $externalService)
    {
        $this->externalService = $externalService;
    }

    public function getViewTickets(Collection $tickets)
    {
        $ids = $tickets->getIds();

        $externalEntities = $this->externalService->getByIds($ids);

        $viewTickets = array();

        foreach ($tickets as $ticket) {
            $viewTicket = new ViewTicket($ticket);
            // If this is too complex, use another service for the merging.
            $viewTicket->addMoreInfoFromExternalSource($externalEntities);

            $viewTickets[] = $viewTicket;
        }

        return $viewTickets;
    }
}


$ticketRepo      = new TicketRepository();
$externalService = new ExternalService();

$tickets = $ticketRepo->getTicketsBasedOnSomeCriteria($criteria);

$viewTicketProvider = new ViewTicketProvider($externalService);
$viewTickets = $viewTicketProvider->getViewTickets($tickets);
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28069372

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档