我以前只是在我的视图上有一个ApplyPresenter()
方法,但从技术上讲,如果视图知道演示者并在其上调用方法,那么这不是被动视图。
因此,我不是调用presenter.AButtonClicked()
,而是可以从视图中公开一个事件,例如event EventHandler AButtonClicked
,然后主持人会订阅。
但我在哪里订阅AButtonClicked
?如果构造函数除了字段赋值之外不应该工作,我不能在构造函数中执行它。我可以在演示者身上使用Initialize()
方法(或者称之为Setup()
),但这不是代码味道吗?
我应该在构造函数中做一些额外的工作并在那里订阅视图的事件吗?
答案 0 :(得分:0)
我应该在构造函数中做一些额外的工作并在那里订阅视图的事件吗?
你可以在构造函数中完成它 - 它是一个可以进行事件绑定的好地方。
或您可以引入一个事件代理,比如IEventBroker,它可以让您的组件发布和订阅事件。
在演示者中:
public MyPresenter(
IEventBroker eventBroker, ...)
{
this.eventBroker = eventBroker;
this.eventBroker.Subscribe("UpdateButtonClicked", this.WhenButtonClicked);
}
并且在视野中:
public MyView(
IEventBroker eventBroker, ...)
{
this.eventBroker = eventBroker;
}
private void someButton_Click(object sender, EventArgs e)
{
this.eventBroker.Fire("UpdateButtonClicked", new EventArgs<Item>(lineID));
}
或您可以说人们经常将被动视图定义为
查看不负责从模型中更新自身
其中没有说明有关控制器/演示者的视图知识。因此,您可以按原样保留ApplyPresenter()
方法。