百度为什么打不开网页无法访问青岛seo外包服务
web/
2025/10/1 7:57:11/
文章来源:
百度为什么打不开网页无法访问,青岛seo外包服务,网站建设公司新报价,做网站应该学什么gwt的mvp模式GWT Model-View-Presenter是用于大规模应用程序开发的设计模式。 它源于MVC#xff0c;它在视图和逻辑之间进行划分#xff0c;并有助于创建结构良好#xff0c;易于测试的代码。 为了帮助像我这样的懒惰开发人员#xff0c;我研究了如何减少使用声明式UI时要编… gwt的mvp模式 GWT Model-View-Presenter是用于大规模应用程序开发的设计模式。 它源于MVC它在视图和逻辑之间进行划分并有助于创建结构良好易于测试的代码。 为了帮助像我这样的懒惰开发人员我研究了如何减少使用声明式UI时要编写的类和接口的数量。 经典MVP 您知道如何在Facebook中发布链接吗 –最近我不得不为一个小GWT旅行应用程序创建此功能。 因此您可以输入一个URL然后将其提取并解析。 您可以从页面中选择图像之一查看文本最后存储链接。 现在如何在MVP中正确设置此设置 –首先创建一个类似于视图的抽象接口 interface Display {HasValueString getUrl();void showResult();HasValueString getName();HasClickHandlers getPrevImage();HasClickHandlers getNextImage();void setImageUrl(String url);HasHTML getText();HasClickHandlers getSave();
} 它利用GWT组件实现的接口来提供对其状态和功能的某些访问。 在测试期间您无需参考GWT内部即可轻松实现此接口。 同样可以在不影响更深层逻辑的情况下更改视图实现。 该实现非常简单此处显示了声明的UI字段 class LinkView implements DisplayUiField TextBox url;UiField Label name;UiField VerticalPanel result;UiField Anchor prevImage;UiField Anchor nextImage;UiField Image image;UiField HTML text;UiField Button save;public HasValueString getUrl() {return url;}public void showResult() {result.setVisible(true);}// ... and so on ...
} 然后演示者使用接口访问视图按照惯例该接口写在presenter类中 class LinkPresenterinterface Display {...};public LinkPresenter(final Display display) {display.getUrl().addValueChangeHandler(new ValueChangeHandlerString() {Overridepublic void onValueChange(ValueChangeEventString event) {Page page parseLink(display.getUrl().getValue());display.getName().setValue(page.getTitle());// ...display.showResult();}});}// ... and so on ...
} 因此我们在这里使用MVP您可以很好地组织代码并使代码易于阅读。 简化 收益是 每个屏幕或组件三种类型 。 每当重新定义UI时三个文件都将更改。 未将ui.xml文件计为视图声明。 对于像我这样的懒人来说这些太多了。 并且如果您查看视图实现很明显如何简化它 使用视图声明* .ui.xml作为视图并将ui元素直接注入到presenter中 class LinkPresenterUiField HasValueString url;UiField HasValueString name;UiField VerticalPanel result;UiField HasClickHandlers prevImage;UiField HasClickHandlers nextImage;UiField HasUrl image;UiField HasHTML text;UiField HasClickHandlers save;public LinkPresenter(final Display display) {url.addValueChangeHandler(new ValueChangeHandlerString() {Overridepublic void onValueChange(ValueChangeEventString event) {Page page parseLink(url.getValue());name.setValue(page.getTitle());// ...result.setVisible(true);}});}// ... and so on ...
} 由于可以使用它们的接口声明注入的元素因此此演示者具有成熟的MVP演示者的许多优点您可以通过设置实现组件来对其进行测试请参见下文并且可以轻松地更改视图实现。 但是现在您将所有这些都放在一个类和一个view.ui.xml文件中并且可以更简单地应用结构更改。 使UI元素抽象 TextBox实现HasValue String。 这很简单。 但是不能通过接口访问的ui元素的属性呢 您可能已经认识到的示例是上述代码中的VerticalPanel命名结果result及其方法setVisible不幸的是该方法在UiObject基类中实现。 因此没有可用的接口例如。 在测试时实施。 为了能够切换视图实现最好注入ComplexPanel但是即使在测试时也无法实例化。 例如在这种情况下唯一的出路是创建一个新接口 interface Visible {void setVisible(boolean visible);boolean isVisible();
} 和子类化有趣的UI组件实现相关的接口 package de.joergviola.gwt.tools;
class VisibleVerticalPanel extends VerticalPanel implements Visible {} 这似乎是乏味和次优的。 但是只能像上述成熟的MVP中那样仅针对每个组件而不是针对每个视图进行操作。 等待-如何在UiBuilder模板中使用自制组件 –很简单 ui:UiBinder xmlns:uiurn:ui:com.google.gwt.uibinder
xmlns:gurn:import:com.google.gwt.user.client.ui
xmlns:turn:import:de.joergviola.gwt.toolsg:VerticalPanel width100%g:TextBox styleNamebig ui:fieldurl width90%/t:VisibleVerticalPanel ui:fieldresultvisiblefalse width100%/t:VisibleVerticalPanel/g:VerticalPanel
/ui:UiBinder 声明处理程序 声明click-处理程序的标准方法非常方便 UiHandler(login)public void login(ClickEvent event) {srv.login(username.getValue(), password.getValue());} 在简化的MVP方法中此代码将驻留在演示者中。 但是ClickEvent参数是View组件可以例如。 不能在运行时实例化。 另一方面由于UiBuilder需要Event参数因此无法从签名中将其删除。 因此不幸的是您必须坚持手动注册ClickHandlers因为无论如何都必须执行完整的MVP public initWidget() {...login.addClickHandler(new ClickHandler() {Overridepublic void onClick(ClickEvent event) {login();}});...
}public void login(ClickEvent event) {srv.login(username.getValue(), password.getValue());
} 测试中 引入MVP时使您的应用程序可测试是主要目标之一。 GwtTestCase能够在容器环境中执行测试但需要一些启动时间。 在TDD中希望有一个运行速度非常快的测试可以在每次更改后应用它而不会丢失上下文。 因此MVP旨在能够在标准JVM中测试所有代码。 在标准MVP中您将创建视图接口的实现。 在这种简化方法中只需在组件接口级别创建实现即可如下所示 class ValueT implements HasValueT {private T value;ListValueChangeHandlerT handlers new ArrayListValueChangeHandlerT();Overridepublic HandlerRegistration addValueChangeHandler(ValueChangeHandlerT handler) {handlers.add(handler);return null;}Overridepublic void fireEvent(GwtEvent? event) {for (ValueChangeHandlerT handler : handlers) {handler.onValueChange((ValueChangeEvent) event);}}Overridepublic T getValue() {return value;}Overridepublic void setValue(T value) {this.value value;}Overridepublic void setValue(T value, boolean fireEvents) {if (fireEvents)ValueChangeEvent.fire(this, value);setValue(value);}} 与往常一样您必须将此组件注入到被测演示者中。 尽管从原则上讲您可以为组件创建一个设置器但我仍然遵循通常的技巧来使组件受包保护将测试与演示者放入同一包中但当然是不同的项目文件夹然后直接设置组件。 你赢了什么 您得到的代码结构像完整的MVP一样干净只需要少得多的类和样板代码。 在某些情况下组件及其接口需要实用程序类但是随着时间的流逝您将构建一个真正易于理解测试和扩展的环境。 我很好奇告诉我您的经历 参考 JWT合作伙伴 简化了GWT MVP Joerg Viola在Joerg Viola博客上 。 翻译自: https://www.javacodegeeks.com/2012/02/gwt-mvp-made-simple.htmlgwt的mvp模式
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/84937.shtml
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!