【发布时间】:2011-01-27 10:03:16
【问题描述】:
视图是否应该在其接口中没有任何特定事件,并调用演示者普通方法来处理事件并且没有任何官方 EventHandlers?比如
// ASPX
protected void OnSaveButtonClicked(object sender, EventArgs e)
{
_Presenter.OnSave();
}
或者视图是否应该在其接口中定义事件事件处理程序并将它们显式链接到页面上的控制事件
// View
public interface IView
{
...
event EventHandler Saved;
...
}
// ASPX Page implementing the view
protected override void OnInit(EventArgs e)
{
base.OnInit(e);
SaveButton.Click += delegate { Saved(this, e); };
}
// Presenter
internal Presenter(IView view,IRepository repository)
{
_view = view;
_repository = repository;
view.Saved += Save;
}
第二个似乎需要添加大量管道代码。
我的目的是了解每种风格的好处,而不仅仅是使用哪种风格的笼统答案。我的主要目标是清晰和高价值的可测试性。总体而言,可测试性很重要,但我不会牺牲设计的简单性和清晰性来添加另一种类型的测试,这种测试不会导致通过更简单的设计已经可能实现的测试用例获得太多收益。如果设计选择确实降低了可测试性,请包括它现在可以提供的测试类型的示例(伪代码很好),这样我就可以做出决定,如果我足够重视这种额外的测试类型。谢谢!
更新:我的问题需要进一步澄清吗?
【问题讨论】:
标签: c# asp.net webforms tdd mvp