0

对不起我的英语不好。

我之前将这个问题发布为:多个 ViewModels 请求相同的域对象,我应该给它们相同/不同的实例吗?

在对此进行了一些研究之后,我意识到我以前的问题太混乱了,所以我发布了这个新问题。

假设我想构建一个 WPF 桌面应用程序来管理 10 亿人的信息。它只有一个最终用户(我),所有数据都存储在我的本地机器(SQL Server / MySQL)中。我将使用 Visual Studio、Autofac、NHibernate,并尝试实现 MVVM、DI、DDD 模式。

同一个人可以同时显示在 UI 的任何位置:在多个窗口、选项卡、列表、组合框、文本块中……每个列表可以包含几千个人,整个应用程序可以有 10~100 个列表。并且列表的内容(人)会经常更新:每次我更改列表的设置时,列表都会被清空,然后又会填充数千个新人

问题是:如果我在一个列表中修改一个人(例如更改姓名),如何将更改应用于所有其他列表?

我认为有两种方法可以解决这个问题:

  1. 对于每个人,在整个应用程序中使用一个实例。为了实现这一点,我可以通过应用程序使用单个 UnitOfWork,但似乎这种方法会导致内存泄漏。

  2. 为每个人使用多个实例(每个列表一个实例)。为了实现这一点,我认为我应该为每个列表使用一个 UnitOfWork,并且我必须找到一种方法来同步一个人的所有实例。Berryl提到了事件聚合器。但谁负责发布和注册活动?

我在这里发现了一个非常相似的问题,并且还阅读了以下文章,但我仍然感到困惑:

谢谢!

4

1 回答 1

2

不要跨会话共享实体实例,并且永远不要将单个会话用于桌面应用程序。

由于通常ViewModel 是单独业务对话的一部分,因此每个 VM 可能有一个会话。

每个 ViewModel 都应该注册它接受的事件,并负责发布它生成的事件。另一种方法是在服务/业务层级别发布。你需要看看什么最适合你的架构。

于 2011-02-13T21:08:29.280 回答