C# 窗口窗体的设计模式

本文关键字:设计模式 窗体 窗口 | 更新日期: 2023-09-27 18:23:52

我正在编写一个抽认卡程序,并且在编写此类表单程序时遇到了一个问题。

我将描述程序,然后描述问题。

在此程序中,一个主窗体控制几乎所有操作。 根据用户的输入和表单事件,不同的按钮/控件可能会启用或禁用,各种框中的文本可能会被填充等。

例如:

  • 有些问题可能是多项选择题,而另一些则需要键入输入。
  • 用户输入他们的答案并点击一个按钮 - 如果他们弄错了什么,他们可以选择覆盖"错误答案"判断,并说这确实是一个不同的,正确的变体。
  • 有关正确回答了哪些问题的统计数据将被保留,并在决定接下来显示哪些闪存卡时使用。

现在问题来了。

如何最好地在"表单"代码(例如,处理"确定"按钮的 onclick 命令,以及启用或禁用各种控件(和"逻辑"代码(基础数据存储、对显示没有直接影响的程序逻辑(之间创建干净的交互?如果它全部混合在表单对象代码中,则似乎不正确。

谁能建议一种设计模式(尤其是广泛使用的模式(来干净地管理这一点?

如果相关,我正在考虑这样的事情:

  • 对象模型:
    • 类 MyForm:表单本身。
    • 类窗体控制器:
      • MyForm 的子类。
      • 实例化需要一个 MyForm 类型的对象。
      • FormController的工作是通过启用/禁用控件,显示各种文本等将其MyForm对象置于特定的"状态"。
      • FormController 公开了一小组公共函数,这些函数处理表单状态的语义高级请求(例如"DisplayNewQuestion(QuestionData d("(
    • 类会话:包含涉及此会话的所有基础持久数据或对象,包括可能的问题列表、从列表中选择下一个问题的对象等。
    • 类驱动程序:驱动会话和窗体控制器对象。例如,它会向 Session 对象询问一个新问题,并将其传递给 FormController 对象以更新表单。

这样的东西的好处是,令人讨厌的表单代码和漂亮的逻辑代码现在是完全可以分离的。但这值得吗?是否有更好或更常见的设计模式?

谢谢吨!

C# 窗口窗体的设计模式

在这种情况下,

我总是对模型视图控制器最满意。遮荫树开发人员写了我读过的关于这个主题的最有见识的系列,见这里

MVC 的要点是

模型包含要显示的数据

视图是您的表单,仅具有用于显示和通知用户交互的逻辑

控制器包含实现这一切的粘合剂,包括业务逻辑。

减刑应为

模型不知道视图或控制器

View 了解模型并知道如何从中提取数据以显示

控制器知道模型和视图,将它们实例化并将它们连接在一起。

模型在更改时引发事件,视图捕获此事件并相应地刷新其显示。

当用户交互发生时,视图会引发一个事件,控制器捕获此事件并为交互执行正确的操作,无论是更新模型还是保存或清除或其他操作。

视图不应写入模型本身

你会看到很多代码,其中表单创建控制器,但 imo 这是错误的。它的出现是因为人们试图在您无法控制生命周期 asp.net Web 表单中应用此模式,总是创建的第一件事就是一个视图,因此您别无选择,只能让它创建您的控制器,但是在 winforms 中您可以控制,所以让它干净,让控制器创建视图。

您可能希望使用模型-视图-控制器 (MVC( 设计模式,其中"逻辑"是控制器,"视图"是 UI。该模型用于从数据源(例如 SQL 数据库(访问和检索数据

将逻辑与 UI 分开是值得的,因为它使它们更易于维护。例如,如果要将 UI 从 winform 更改为网页,则不必重做所有逻辑。

此外,它弥补了一个真正更干净的代码。通常,使用设计模式也可以帮助其他程序员更快地理解您的代码。