我發現自己經常創建一個沒有公共方法且自成體系的對象。它通常處理在其私有方法中傳遞給其構造函數的參數事件,並且不會引發任何事件或公開任何方法。「被動」對象是否被認爲是一種良好的設計實踐?
我打電話這種類型的對象「被動」的對象 - 沒有定義的任何公共方法的對象。在構造函數中傳遞的參數的私有方法和事件中,所有交互發生在它們內部。
通常,它是一些工具類,像一個確保兩種形式將被粘在一起:
public class StickyForm : IDisposable
{
private readonly Form form;
private readonly Form parentForm;
public StickyForm(Form form, Form parentForm)
{
this.form = form;
this.form.StartPosition = FormStartPosition.Manual;
this.parentForm = parentForm;
this.parentForm.LocationChanged += new EventHandler(parent_LocationChanged);
this.parentForm.SizeChanged += new EventHandler(parent_SizeChanged);
SetLocation();
}
void parent_SizeChanged(object sender, EventArgs e)
{
SetLocation();
}
void parent_LocationChanged(object sender, EventArgs e)
{
SetLocation();
}
private void SetLocation()
{
//compute location of form based on parent form
}
public void Dispose()
{
this.parentForm.SizeChanged -= parent_SizeChanged;
this.parentForm.LocationChanged -= parent_LocationChanged;
}
}
但有時也是某種控制器,兩個視圖之間提供相互作用:
public class BrowseController
{
private IBrowserView view;
private IFolderBrowser folderBrowser;
public BrowseController(IFolderBrowser folderBrowser, IBrowserView view)
{
this.view = view;
this.folderBrowser = folderBrowser;
this.folderBrowser.NodeOpened += folderBrowser_NodeOpened;
}
private void folderBrowser_NodeOpened(object sender, Core.Util.TEventArgs<IPictureList> e)
{
this.Browse(e.Value);
}
public void Browse(IPictureList content)
{
//stripped some code
AddItemsToView(content);
}
private void AddItemsToView(IPictureList browser)
{
//call methods on view
}
}
這樣的「被動」物體是否被認爲是良好的設計實踐?
是否有這種類的一個更好的名字?
對不起,但我沒有看到這種方法的戰略模式的任何跡象。你能詳細說明一下嗎? – Marek 2009-11-16 07:04:57
Marek @:請參閱我的原始文章更新 – BostonLogan 2009-11-16 13:05:04
這絕對不是一種策略 - 1.只有一種形式的粘性是可能的2.算法在運行時不會被切換。鑑於你的方法,我們可以調用你可以(可能)子類的一切策略:) – Marek 2009-12-01 08:57:30