我发现自己经常创建一个没有公共方法且自成体系的对象。它通常处理在其私有方法中传递给其构造函数的参数事件,并且不会引发任何事件或公开任何方法。“被动”对象是否被认为是一种良好的设计实践?
我打电话这种类型的对象“被动”的对象 - 没有定义的任何公共方法的对象。在构造函数中传递的参数的私有方法和事件中,所有交互发生在它们内部。
通常,它是一些工具类,像一个确保两种形式将被粘在一起:
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