gpt4 book ai didi

wpf - 在多个 View 模型之间共享模型对象的最佳实践是什么?

转载 作者:行者123 更新时间:2023-12-03 10:16:13 25 4
gpt4 key购买 nike

在我的 WPF 应用程序中,我使用 MVVM 模式和存储库模式。我有一个提供飞机对象列表的存储库。从用户的角度来看,我想以几种不同的方式显示这些飞机(例如在 map 上、在列表中、以文本形式等),并且还允许用户过滤对象。为了实现这一点,我为每种不同的数据表示方式构建了 View 和 View 模型。

我现在的问题是我不确定使飞机对象列表可用于所有不同的 View 模型的最佳做法是什么。以下是我考虑过的一些替代方案:

1.将存储库注入(inject)每个 View 模型,然后从存储库中获取所有对象。

2.将存储库注入(inject)到 MainViewModel 中,该模型从 repo 中检索所有对象,然后将对象集合注入(inject)到需要它的所有其他 View 模型中。

总而言之:我有一组 View 模型,它们都使用相同的模型对象集合。使用存储库模式时,在 View 模型之间共享此集合的最佳实践是什么?

最佳答案

在 WPF 应用程序中,我通常会创建封装存储库的服务对象,这些存储库又包含一个 session 对象,但我使用依赖注入(inject)来注入(inject)实际实现。这样做的主要好处之一是可以轻松地模拟所有内容以进行单元测试,但另一个好处是您现在可以完全控制这些对象的范围。如果您从数据库中提取数据,那么您将有不同的 session 管理策略,具体取决于您是在开发 Windows 应用程序还是网站(例如),并且在企业应用程序中,即使在相同的代码中,此要求也会发生变化根据。 Germán Schuager's blog上有一篇好文章讨论各种 session 管理策略的优缺点,但对于每个表单使用一个 session 的 WPF 应用程序来说似乎是一个很好的策略。如果您使用的是 Ninject 之类的东西,那么您只需将 ISession 对象限定为顶级“页面”的 View 模型,然后该页面的逻辑层次结构中的所有对象都可以创建自己的存储库,而无需了解每个其他。由于它们都共享相同的 session 对象,它们还在存储库缓存中共享相同的实体,因此模型现在由多个 View 模型共享。剩下的唯一一件事就是向域层中的实体类添加属性通知,以便一个 View 模型所做的更改传播到其他 View 模型,但这是另一篇文章的主题(提示:您的数据库层应该提供一些机制注入(inject)您自己的包装代理以使用 CaSTLe DynamicProxy 等自动添加属性更改通知)。

关于wpf - 在多个 View 模型之间共享模型对象的最佳实践是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21366396/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com