我有一个关于如何在使用MVP时处理演示者之间的通信的问题.说我有两个MVP三合一.一个是产品清单(Triad A),另一个是关于当前所选产品(Triad B)的一些一般信息.
如何告知Presenter B它需要更新,因为所选产品已被A更改?我当然可以想办法做到这一点,但我想知道是否有一个如何处理这个问题的一般惯例.
提前感谢任何想法!
Ste*_*n P 13
模式本身并没有真正规定如何处理这个问题.
我自己的偏好是一个消息/事件中心,主持人可以在这些中心注册对某些事件的兴趣.它可以防止复杂的依赖树,并使演示者可以测试.
例如:
class PresenterA
{
void HandleProductSelectionChanged(int productId)
{
EventHub.Publish(EventType.ProductChanged, productId);
}
}
class PresenterB
{
void PresenterB
{
EventHub.Register(EventType.ProductChanged, HandleProductChanged);
}
public void HandleProductChanged(object state)
{
var productId = (int)state;
var productDetails = LoadProductDetails(productId);
view.DisplayProductDetails(productDetails);
}
}
Run Code Online (Sandbox Code Playgroud)
EventHub会保留一个订阅者列表,以便为每种事件类型调用.
您保留了可测试性 - 只需调用HandleProductChanged以了解PresenterB如何响应新产品选择.
唯一的缺点(与任何模式一样)是引入一个间接级别.如果PresenterA直接调用了PresenterB,或者PresenterB在PresenterA上收听了一个事件,那么很明显会发生什么.
在这种方法中,您将有额外的步骤查看EventType.ProductChanged,然后查找哪些Presenters注册了对该事件的兴趣.
根据我自己的经验,单一级别的间接是非常值得的模块化.
| 归档时间: |
|
| 查看次数: |
3871 次 |
| 最近记录: |