[英]Design pattern to accommodate two different ways of handling a Winform's functions
我有一個WinForm
,用於構建和測試電子郵件通訊。 該表單包含許多方法和事件。
現在,我在程序中添加了一項新功能,以允許進行拆分測試(A / X測試),因此最多可以為一個廣告系列創建4個不同的新聞通訊。
因此,我想擴展我的表格以容納普通新聞通訊和A / X新聞通訊。 我將向表單添加兩種不同的模式。 就像是:
private enum CampaignMode { Normal, AxTest };
它們的外觀將非常相似,不同之處在於許多控件的可見性將發生變化。
除此之外,幾乎所有的方法和事件都有兩種單獨的處理方式。
我應該使用哪種設計模式,而不必創建新的單獨表單?
為了簡單起見,假設我的表單具有以下方法:
EditMode
作為參數 EditMode
設置控件的可見性 Normal
模式 AxTest
模式 聽起來像Template Method將是一個不錯的選擇。
創建一個基本類,該類負責基本初始化的邏輯, Load()
, Create()
, SetControlViews()
,然后使Method()
虛擬,並根據專用邏輯在兩個派生類中重寫。 同樣,每個派生類的構造函數都可以進行一些專門的初始化。
這樣,您甚至不需要CampaignMode
枚舉(如果您EditMode
它們相同,則不需要EditMode
)。 通過存在不同的派生類可以說明不同實體的存在。
我將簡單地為每個方法/事件使用一對函數,然后讓主處理程序調用適當的函數,具體取決於CampaignMode的值。
public enum CampaignMode { Normal, AxTest };
public partial class DemoForm : Form
{
private CampaignMode campaignMode;
public DemoForm(CampaignMode mode)
{
InitializeComponent();
campaignMode = mode;
SetControlsVisibility();
}
private void SetControlsVisibility()
{
if (campaignMode == CampaignMode.Normal)
{
//Set normal controls visible;
//Set axtest controls invisible;
}
else
{
//Set normal controls invisible;
//Set axtest controls visible;
}
}
private void button1_Click(object sender, EventArgs e)
{
if (campaignMode == CampaignMode.Normal)
{
MethodA();
}
else
{
MethodB();
}
}
private void MethodA()
{
}
private void MethodB()
{
}
}
注意:如果有很多控件,那么擁有帶有bool參數的可見性功能就顯得更加整潔了:例如
private void SetNormalVisibility(bool isNormal)
{
//normalTextBox.Visible = isNormal;
//normalButton.Visible = isNormal;
//axTestTextBox.Visible = !isNormal;
//axTestButton.Visible = !isNormal;
}
在這種情況下,請將SetControlsVisibility函數更改為:
private void SetControlsVisibility()
{
if (campaignMode == CampaignMode.Normal)
{
SetNormalVisibility(true);
}
else
{
SetNormalVisibility(false);
}
}
HTH
喬納森
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.