我有一个演示者,它调用 Handler 并从服务器获取数据 另一个小部件需要相同的数据,它是现有视图的微型版本,但这将一直显示在应用程序中。
这里我的共同点是调用处理程序、相同的处理程序和操作对象。
什么是最好的设计方法。
我可能的解决方案:1)编写一个可以访问调度程序对象的通用类(通过Ginjector注入),使用方法获取数据。但是根据 MVP 架构,调度程序的使用仅限于演示者,但这是非演示者类。
我有一个演示者,它调用 Handler 并从服务器获取数据 另一个小部件需要相同的数据,它是现有视图的微型版本,但这将一直显示在应用程序中。
这里我的共同点是调用处理程序、相同的处理程序和操作对象。
什么是最好的设计方法。
我可能的解决方案:1)编写一个可以访问调度程序对象的通用类(通过Ginjector注入),使用方法获取数据。但是根据 MVP 架构,调度程序的使用仅限于演示者,但这是非演示者类。
If you are using event bus, your presenter(which makes calls to Handler) can fire events with new data and your miniature widget can register with event bus to receive them. This way only one presenter would call to server and anything on client can be notified using events.
AFAIK 没有任何内容MVP
表明一切都必须在Presenter
. Presenters
将多个通用的逻辑封装在一个公共类中 是有意义的。
MVP
与其说是一成不变的规则,不如说是一种模式。因此,当它有意义时,您可以稍微偏离模式。
恕我直言,通用类是正确的方法。
使用通用类来处理对后端的请求还可以轻松实现缓存和身份验证等。
有两种方法可以在你Presenters
的类和普通类之间进行通信:
Presenters
需要数据的地方。您可以从演示者调用公共类的 a 方法并注册回调。EventBus
触发Event
(即)并在公共类中处理它。当从后端接收到数据时,您可以从公共类中触发另一个(即)并在相应的.LoadDataEvent
Presenters
Event
Event
DataLoadedEvent
Presenters
解决方案 1 可能更容易实现,但是您在公共类和公共类之间存在一些耦合Presenter
(如果您使用依赖注入,这还不错)。
解决方案 2需要更多代码(您必须定义事件),但提供了很大的灵活性和解耦。例如,如果您创建一个Presenter
对数据也感兴趣的新对象,您只需DataLoadedEvent
在 Presenter 中注册一个 Handler 即可。