c# - 设计模式以适应处理 Winform 功能的两种不同方式

标签 c# winforms design-patterns

我有一个 WinForm,我用它来构建和测试电子邮件通讯。该表单包含许多方法和事件。

我现在正在向我的程序添加一项新功能,以允许进行对比测试(A/X 测试),从而为一个事件创建最多 4 个不同的新闻通讯。

因此,我想扩展我的表单以适应普通新闻通讯和 A/X 新闻通讯。我将在我的表单中添加两种不同的模式。像这样的东西:

private enum CampaignMode { Normal, AxTest };

它们的外观非常相似,只是许多控件的可见性会发生变化。

除此之外,几乎所有方法和事件都有两种不同的处理方式。

我应该使用什么设计模式,这样我就不必创建新的单独表单?

为简单起见,假设我的表单具有以下方法:

  1. 构造函数:可能接收 EditMode 作为参数
  2. 加载
  3. 创建:按钮点击事件
  4. SetControlViews:根据EditMode设置控件的可见性
  5. 方法A:特定于正常模式
  6. 方法B:特定于AxTest模式

最佳答案

听起来像Template Method将是一个不错的候选人。

创建一个基类,负责基本初始化、Load()Create()SetControlViews() 和然后根据专门的逻辑将 Method() 虚拟化并在两个派生类中重写。此外,每个派生类的构造函数可以进行一些专门的初始化。

这样,您甚至不需要 CampaignMode 枚举(或者 EditMode 如果您希望它们相同)。不同实体的存在通过不同派生类的存在来说明。

关于c# - 设计模式以适应处理 Winform 功能的两种不同方式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38606880/

相关文章:

.net - 为什么 System.Windows.Forms.Control MousePosition 属性可以读取,但 Location 不能读取?

c# - 带有字典数据源的列表框显示完整的 KeyValuePair 而不仅仅是值

c++ - 多重继承 : calling all the overriden functions

c# - 将打印命令发送到不是 C# 中默认打印机的打印机

c# - 根据文件夹结构对 url 字符串列表进行分组

c# - System.Diagnostics.StackTrace 紧凑框架

c# - 我应该在 ServiceController 上调用 Close() 吗?

kotlin - 在Kotlin中将一个对象转换为另一个对象的更好方法是什么?

c++ - 避免在消息传递中向下转型的设计模式

C#:找出代码中算术运算的结果类型(例如 int + double = double)