gpt4 book ai didi

c# - 全局数据真的那么糟糕吗?

转载 作者:行者123 更新时间:2023-11-30 17:47:52 25 4
gpt4 key购买 nike

我有一个处理发货数据的 WPF mvvm 应用程序,这包括将其分解为项目和形式等。

但是,我现在面临的是需要了解大量 View 模型、当前选择了哪个项目、哪个形式等等,以及能够访问数据列表,例如具有的项目已从数据库中拉出。

现在,这些数据通过我称为存储库的类加载、更新、删除和插入。例如 ProjectRepository,我的计划是将加载的数据也存储在这些类中,因此它将包含一个可公开访问的列表(其中项目是我的模型),并且这些存储库是静态的。

所以问题归结为,形式是根据当前选择的项目加载的(通过数据库中的项目 ID),因此存储库需要知道选择了哪个项目。我当前的系统使用 View 模型订阅的自定义事件,以便捕获项目选择的变化,但是我现在有几十个事件,每个事件都有几十个订阅者,这对我来说似乎有点荒谬,坦率地说,这使得它很难遵循代码。

所以,对于一大段文字,我很抱歉,我想说清楚我的情况,并提出我知道似乎会激怒某些人的问题。拥有一个只保存所有当前选定对象(项目、形式、装运等)属性的静态类有什么问题,这会让我的生活变得更加轻松。

或者是否有一种我还没有见过的“正确”方法?

最佳答案

我认为,如果您想要对可变数据使用全局静态对象,这通常表明存在设计缺陷。

使用全局变量的核心问题是你失去了所有的封装。这意味着,随着应用程序规模的增长,将程序的某些部分作为组件来考虑(或测试)变得不可能。每个组件的每个实例都可能与其他组件进行交互,由全局静态对象作为中介。一旦您将线程和并发添加到组合中,问题就会变得复杂。

My current system uses custom events which viewmodels subscribe to in order to capture a change in the project selection, however it seems a little ridiculous to me that i now have dozens of events, each with dozens of subscribers, and frankly it makes it quite difficult to follow the code.

我不相信这会让您的生活更轻松,即使在短期内也是如此。当项目更改时, View 模型不需要得到通知吗?否则,它们可能会显示陈旧数据或对陈旧数据采取行动。在我看来(不可否认,基于有限的信息)您应该尝试简化用户更改项目时发生的事件链。

也许您可以扔掉 View 并重新创建它们?或者可能向您的基本 View 模型添加一个虚拟方法,如“OnProjectChanged”?或者,如果 View 模型实际上不需要收到更改通知,只需将 Func<ProjectData> 传递给它们即可。以便他们可以在需要时懒惰地拉取当前数据。我不知道什么是最好的,但必须有比引入全局静态和承担由此带来的所有麻烦更好的解决方案。

关于c# - 全局数据真的那么糟糕吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24144713/

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