0

我有大量数据偶尔可能会在后台更新。作为一个自学实验,我不希望依赖任何框架。现在,我正在尝试在 DDD/CQRS 上下文中使用 MVC/MVVC 模式找到合适的位置。

为了填充表,我对大型数据集进行了查询,并将结果限制为显示行数的两倍。一旦用户滚动查询的一半,我查询下一批结果。

当用户滚动时,我将所有结果加载到一个数组中,这只是一个渐进式加载,而不会丢弃未显示的行。

谁负责构建转换为域对象的结果数组?MVC 的模型还是数据存储库?

理想情况下,我想重用我的 MVC 模型,而不必总是担心限制查询结果。

如果在后台更新数据,则会创建一个系统事件。但是,在创建新行的情况下,我希望我的应用程序在后台插入新行的动画,而不仅仅是丢弃查询并重新加载表。在这种情况下,我猜后台进程必须加载当前查询的副本并将其与现有查询进行比较。它应该使用新行的位置创建一个“新行系统事件”。

哪个组件应该将当前查询结果与以前的查询结果进行比较以计算插入点和删除点?系统服务?MVC 模型?

我最后担心的是,如果数据在后台更新,加载具有多个有限查询的一组行可能会不一致。我应该如何/在哪里执行这种一致性?

4

1 回答 1

1

CQRS 和 DDD = 一种域模型和至少一种查询模型。现在,为了您自己的利益,不要将 DDD 视为具有许多违反规则的东西,这将使您成为 DDD 公敌 no1。

让我们想一想:一旦更新了域对象并发布了域事件,您将拥有一个事件处理程序,它将更新查询模型。哪个查询模型正是您需要的 UI(视图模型)。

客户端 UI 应每隔一段时间请求更新(传递当前模型的日期时间戳)。哪些更新也是查询模型的一部分。为了检测发生了什么变化,更新应该有一个日期时间戳,它将与当前显示的时间戳进行比较。如果它是一个网络应用程序,那么我强烈建议使用像 angularjs.org 这样的 js 框架

现在,这个场景中的 MVC 模型是查询存储库。当插入/编辑一行时,模型将是一个服务(或命令处理程序),它将更新域。与域更改和查询模型生成相关的所有内容都在 UI 之外,作为服务/应用程序(随心所欲地称呼它)层的一部分。

于 2013-10-25T09:15:52.107 回答