【发布时间】:2010-12-16 05:41:10
【问题描述】:
我发现自己经常创建一个没有公共方法且自包含的对象。它通常在其私有方法中处理传递给其构造函数的参数事件,并且不会引发任何事件或公开任何公共方法。
我称这种类型的对象为“被动”对象——没有定义任何公共方法的对象。所有交互都发生在它们内部的私有方法和构造函数中传递的参数事件中。
通常它是一些实用程序类,例如确保两个表单粘在一起的类:
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
}
}
这样的“被动”对象是否被认为是一种好的设计实践?
这种类有更好的名字吗?
【问题讨论】:
标签: model-view-controller oop architecture