我有一个演示者,可以调用Handler并从服务器获取数据 另一个小部件需要相同的数据,这是现有视图的缩小版本,但这将在应用程序中显示所有时间。
这里我常见的是调用处理程序,相同的处理程序和操作对象。
设计的最佳方式是什么。
我可能的解决方案: 1)编写一个可以访问调度程序对象的Common类(通过Ginjector注入),使用这些方法获取数据。 但是根据MVP架构,调度程序的使用仅限于演示者,但这是非演示者类。
答案 0 :(得分:1)
如果您正在使用事件总线,您的演示者(调用Handler)可以使用新数据触发事件,并且您的微型窗口小部件可以使用事件总线注册以接收它们。这样,只有一个演示者可以调用服务器,并且可以使用事件通知客户端上的任何内容。
答案 1 :(得分:1)
AFAIK关于MVP
没有任何内容表明必须在Presenter
中完成所有操作。在一个公共类中封装多个Presenters
共有的逻辑是有意义的。
MVP
是一种模式,而不是一种写在石头上的规则。因此,当它有意义时,你可以偏离模式一点点。
恕我直言,普通班是一种正确的方法 使用公共类来处理对后端的请求也使得实现缓存和身份验证变得容易。
有两种方法可以在Presenters
和公共类之间进行通信:
Presenters
。在演示者中,您可以在公共类上调用方法并注册回调。EventBus
注入公共类并从相应的Event
触发LoadDataEvent
(即Presenters
)并在共同位置处理此Event
类。从后端接收数据后,您可以从公共类中触发另一个Event
(即DataLoadedEvent
)并在相应的Presenters
中处理它。 解决方案1 可能更容易实现,但是你在公共类和Presenter
之间有一些耦合(如果你使用依赖注入,它就没那么糟糕了)。
解决方案2 需要更多代码(您必须定义事件),但提供了很多灵活性和解耦。例如,如果您创建一个对数据感兴趣的新Presenter
,则只需在Presenter中为DataLoadedEvent
注册一个处理程序即可。