gpt4 book ai didi

c# - Webforms MVP 被动 View - 事件处理

转载 作者:太空狗 更新时间:2023-10-29 21:47:46 29 4
gpt4 key购买 nike

View 是否应该在其接口(interface)中没有任何特定于事件的内容并调用演示者普通方法来处理事件并且没有任何官方的 EventHandlers?比如

// ASPX
protected void OnSaveButtonClicked(object sender, EventArgs e)
{
_Presenter.OnSave();
}

或者 View 是否应该在其接口(interface)中定义事件 EventHandlers 并将它们显式链接起来以控制页面上的事件

// 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;
}

第二个似乎需要添加很多管道代码。

我的目的是了解每种风格的好处,而不是笼统地回答应该使用哪种风格。我的主要目标是清晰度和高值(value)的可测试性。总体而言,可测试性很重要,但我不会牺牲设计的简单性和清晰度来添加另一种类型的测试,这种测试不会导致通过更简单的设计已经可能获得的测试用例获得太多 yield 。如果设计选择没有更多的可测试性,请包括一个示例(伪代码很好)它现在可以提供的测试类型,这样我就可以在我足够重视这种额外测试的情况下做出决定。谢谢!

更新:我的问题需要进一步澄清吗?

最佳答案

我不喜欢在界面中明确引用按钮(或任何其他控件)。这意味着我们与控件的实现紧密相关。

控件在项目类型(例如 Winforms 和 ASP)之间的实现方式可能非常不同。

这意味着界面可能需要针对不同的 View 进行修改,这正是我们不希望看到的。 MVP 的全部要点是 Presenter 可以依赖一个稳定的接口(interface),该接口(interface)允许将 UI 与模型分离,轻松替换具体 View 和可测试性。

最好坚持使用不依赖于任何特定控件的接口(interface)上的属性和方法,并将实现细节留给具体 View 。

关于c# - Webforms MVP 被动 View - 事件处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2442782/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com