gpt4 book ai didi

GWT MVP 的地点和事件 - 模型在哪里?

转载 作者:行者123 更新时间:2023-12-02 11:29:37 24 4
gpt4 key购买 nike

我正在努力熟悉 GWT 开发的“场所和事件”设计模式,到目前为止,我认为它有很大的潜力。我特别喜欢这样的方式:一旦您开始从“位置”的角度考虑您的应用程序,浏览器历史记录实际上就在您的腿上,几乎不需要额外的努力。

但是,有一件事让我烦恼:到目前为止我看到的所有文章和代码示例都掩盖了一个(就我而言,主要)方面:“MVP”的“M”部分,即模型!

在正常的 MVP 架构中,据我了解,Presenter 持有对 Model 的引用,并负责根据 UI 事件更新它,或者根据 Model 的更改分别更新 UI。

现在,在“P&A”的所有文章/示例中,事件似乎正在取代演示者,但与“普通”演示者不同,每当新位置到达时,它们就会被丢弃并(重新)创建,因此他们不能存储客户端状态,否则每次都会丢失。事件的创建成本很低,因此并不麻烦,但我不想一遍又一遍地创建复杂应用程序的模型。

所有示例都相当简单,没有太多状态,因此只需忽略模型方面,但实际的复杂应用程序将在哪里存储其状态?

最佳答案

我想我找到了自己的答案。主要问题似乎是所有简单的代码示例都使事件成为演示者,如下所示:

public class NavigationActivity extends AbstractActivity implements NavigationView.Presenter {
private final ClientFactory clientFactory;
private final NavigationPlace place;

public NavigationActivity(ClientFactory clientFactory, NavigationPlace place) {
this.clientFactory = clientFactory;
this.place = place;
}

@Override
public void start(AcceptsOneWidget panel, EventBus eventBus) {
NavigationView navView = clientFactory.getNavigationView();
navView.setSearchTerm(place.getSearchTerm());
navView.setPresenter(this);
panel.setWidget(navView);
}

@Override
public void goTo(Place place) {
clientFactory.getPlaceController().goTo(place);
}
}

现在的 Activity 的生命周期相当短暂,而“经典”意义上的典型 Presenter 的生命周期要长得多,以便维持模型和 UI 之间的绑定(bind)。所以我所做的就是使用标准 MVP 设计模式实现一个单独的 Presenter,所有 Activity 所做的事情都是这样的:

public class NavigationActivity extends AbstractActivity {
private final ClientFactory clientFactory;
private final NavigationPlace place;

public NavigationActivity(ClientFactory clientFactory, NavigationPlace place) {
this.clientFactory = clientFactory;
this.place = place;
}

@Override
public void start(AcceptsOneWidget panel, EventBus eventBus) {
NavigationPresenter presenter = clientFactory.getNavigationPresenter();
presenter.setSearchTerm(place.getSearchTerm());
presenter.go(panel);
}
}

因此,事件不是获取 View ,并像其上的演示者一样,而是获取实际演示者,只是通知它引起的客户端状态更改由地点,并告诉它在哪里显示其信息(即 View )。然后演示者可以自由地以任何喜欢的方式管理 View 和模型 - 这种方式比我发现的代码示例要好得多(至少对于我正在开发的应用程序来说是这样)远。

关于GWT MVP 的地点和事件 - 模型在哪里?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5510571/

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