我有大量数据偶尔会在后台更新。作为一个自学教学实验,我不希望依赖任何框架。现在我正试图在DDD / CQRS上下文中找到MVC / MVVC模式的正确位置。
为了填充表格,我会查询大型数据集,并将结果限制为显示行数的两倍。一旦用户滚动超过查询的一半,我就会查询下一批结果。
我在用户滚动时将所有结果加载到数组中,只是渐进式加载而不会丢弃未显示的行。
谁负责构建转换为域对象的结果数组? MVC模型还是数据存储库?
理想情况下,我想重用我的MVC模型而不必总是担心限制查询结果。
如果在后台更新数据,则会创建系统事件。但是,在创建新行的情况下,我希望我的应用程序为新行的后台插入设置动画,而不仅仅是丢弃查询并重新加载表。在这种情况下,我猜后台进程必须加载当前查询的副本并将其与现有查询进行比较。它应该创建一个带有新行位置的“新行系统事件”。
哪个组件应该将当前查询结果与之前的查询结果进行比较,以便计算插入和删除点?系统服务? MVC模型?
我最后担心的是,如果数据在后台更新,则加载一组包含多个有限查询的行可能会不一致。我应该如何/在哪里强制执行这种一致性?
答案 0 :(得分:1)
CQRS和DDD =一个域模型和至少一个查询模型。现在,不要将DDD视为具有许多破坏规则的东西,这将使你成为DDD公敌n1。
让我们思考一下:一旦更新了Domain对象并发布了域事件,您将拥有一个更新查询模型的事件处理程序。哪个查询模型正是UI所需的模型(视图模型)。
客户端UI应每隔一段时间请求更新(传递当前模型日期时间戳)。哪些更新也是查询模型的一部分。为了检测更改的内容,更新应该有一个日期时间戳,可以与当前显示的相比较。如果它是一个Web应用程序,那么我强烈建议使用像angularjs.org
这样的js框架现在,此场景中的MVC模型是查询存储库。插入/编辑行时,Model将是一个服务(或命令处理程序),它将更新域。与域更改和查询模型生成相关的所有内容都在UI之外,作为服务/应用程序(无论您希望如何调用)层的一部分。