【发布时间】:2013-10-24 21:38:26
【问题描述】:
我有大量数据,有时可能会在后台更新。作为一个自学实验,我不希望依赖任何框架。现在我正在尝试在 DDD/CQRS 上下文中找到 MVC/MVVC 模式的正确位置。
为了填充表,我对大型数据集进行了查询,并将结果限制为显示行数的两倍。一旦用户滚动超过一半的查询,我就会查询下一批结果。
当用户滚动时,我将所有结果加载到一个数组中,这只是一个渐进式加载,不会丢弃未显示的行。
谁负责构建转换为域对象的结果数组? MVC 的模型还是数据存储库?
理想情况下,我想重用我的 MVC 模型,而不必总是担心限制查询结果。
如果在后台更新数据,则会创建一个系统事件。但是,在创建新行的情况下,我希望我的应用程序为新行的背景插入设置动画,而不仅仅是丢弃查询并重新加载表。在这种情况下,我猜后台进程必须加载当前查询的副本并将其与现有查询进行比较。它应该使用新行的位置创建一个“新行系统事件”。
哪个组件应该将当前查询结果与之前的查询结果进行比较以计算插入点和删除点?系统服务? MVC 模型?
我最后担心的是,如果数据在后台更新,加载具有多个有限查询的一组行可能会不一致。我应该如何/在哪里强制执行这种一致性?
【问题讨论】:
-
显示的数据在某种程度上总是陈旧的。为什么不让用户刷新或让系统定期刷新。
-
考虑到 CQRS 架构,如果用户请求新行,则命令和查询是异步事件。我认为在这种情况下,如果您想尽快呈现新的空行,只能是系统而不是用户,他们根据数据库的更新时间决定何时重新加载查询,而不是何时用户单击新行的按钮。
-
我认为客户端负责检测数据变化(通过定期扫描),否则服务器需要广播一个dataUpdatedEvent(我认为这很浪费网络)或者保留一个客户端备忘录来决定哪个客户对更新感兴趣(我认为这会增加很多复杂性)。嗯……StackOverflow 上的评论通知功能是如何实现的?
-
对我来说何时更新查询无关紧要。更新数据库时,我已经有一个 Event 对象。我的问题是关于 (1) 我应该在哪些模式/组件中构建部分查询结果,以及 (2) 比较与以前查询的差异以动画插入或删除。
-
看看 SignalR,以便在数据发生变化时将数据推送到客户端。
标签: design-patterns model-view-controller domain-driven-design cqrs