多个ViewModel修改相同的域对象

时间:2011-02-13 20:14:35

标签: nhibernate mvvm fluent-nhibernate domain-driven-design unit-of-work

抱歉我的英语。

我之前将此问题发布为:Multiple ViewModels request same domain object, should I give them the same/different instance(s)?

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

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

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

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

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

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

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

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

    谢谢!

1 个答案:

答案 0 :(得分:2)

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

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

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