c# - 随着软件复杂性的增加组织事件处理的方法

标签 c# architecture event-handling mvp

我正在尝试将模型 View 展示器 (MVP) 模式用于我正在编写的软件。我正在使用 C# 和 Windows 窗体,尽管这对于回答我的问题应该无关紧要。

我有多个“MVP 结构”。例如,一个是处理保留模式图形,我可以在 Canvas 上绘制几何形状。另一个是采用这些形状,对它们进行一些分析并将结果放在其他地方。可能有许多事件导致 Controller 在某处操作数据,然后导致在另一个地方对数据进行级联操作,依此类推。

我担心的是,如果我没有正确组织我的软件,我最终会忘记正在发生什么变化。我可以想到两种方法来组织我的软件中发生的程序部分之间的交互:分层的或类似开关板的。

我的问题是:是否有任何众所周知的方法或模式可供我引用以组织我的软件?我的网络搜索需要一个起点。

最佳答案

我觉得你的直觉是对的。如果您创建许多级联的事件,您将以麻烦告终。由于失控事件,我见过很多次过于复杂的应用程序。这使得代码很难调试和改进。

我首先想到的是中介者模式。详细说明一下,我将拥有管理部分业务逻辑的中央类。我会在每个 MVP 轻量级中都有模型,基本上是一个客户端,它向服务器(这个 Controller 类之一)询问更复杂的业务逻辑。这个想法是让 MVP 类的每个模型与尽可能少的类(核心业务逻辑)交互,并避免与其他 MVP 交互(这将具有更具体的业务逻辑)

在任何情况下,我都会尽可能地限制抛出和监听事件的类,并将其集中在尽可能少的地方。观察者模式在这里可以提供帮助。此外,拥有一个包含大量业务逻辑的服务层的客户端-服务器架构有助于在未来实现这种解耦和维护。

fowler 经典的“企业应用架构模式”中的模式服务层也值得一读。

关于c# - 随着软件复杂性的增加组织事件处理的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16818734/

相关文章:

java - 使用委托(delegate)来分隔层

c++ - C头文件可以被视为接口(interface)吗?

javascript - 在 Firefox 中按键不触发

c# - 如何保存/传递 MongoDB UpdateDefinition 以进行日志记录和以后使用?

c# - 什么时候应该在 Asp.Net Core 中使用 Task.Run?

c# - 从字符串中删除子字符串

sql - SQL Server中的LSN是什么意思?

c# - 在 C# 中具有强类型发送者的 EventHandler

javascript - Javascript 事件处理中的问题

c# - DotNetZip - 在 C# 中调用 Save(stream) 之前计算最终的 zip 大小