新的Vaadin Spring發布,增強了視圖管理功能

欠債3649元 7年前發布 | 33K 次閱讀 Spring JEE框架

Vaadin 是一個使用UI組件來構建Web應用的多語言框架,最近發布了 Vaadin Spring 項目的 1.1版本 。

在Vaadin的 Navigator 類和 View 接口方面,有兩個新的特性:

  • 新的 SpringNavigator 類
  • 新的 @SpringViewDisplay 注解

SpringNavigator 類極大地“簡化了視圖的配置”, @SpringViewDisplay 注解能夠用來“標記目標Vaadin組件,指定了我們的視圖要實際展現的地方。”

另外,還有一些 缺陷修正 ,包括使用Vaadin Spring來序列化HTTP session。

如下的代碼片段展示了如何使用 SpringNavigator 類和 @SpringViewDisplay 注解:

// MainUI.java
@SpringUI
@Theme("valo")
public class MainUI extends UI {
    MainViewDisplay mainContent;
    public MainUI(MainViewDisplay mainContent,SpringNavigator navigator) {
        this.mainContent = mainContent;
        navigator.setErrorView(ErrorView.class);
        }
    /// 其他的支撐代碼...
    }
// MainViewDisplay.java
@SpringViewDisplay
public class MainViewDisplay extends Panel implements ViewDisplay {
    public MainViewDisplay() {
        setStyleName(ValoTheme.PANEL_BORDERLESS);
        }
    @Override
    public void showView(View view) {
        // 假設視圖是組件,通常都會這樣
        setContent((Component)view);
        }
    }

在GitHub上的完整項目包含了上述Java文件源碼的 變更集合 ,闡述了用來實現導航和視圖管理功能的更簡潔的代碼。

InfoQ與 Matti Tahvonen 進行了交流,他是Vaadin的產品市場主管,討論了這次版本相關的情況。

InfoQ:你目前在Vaadin的職責是什么呢?

Tahvonen:我的官方職位是Vaadin框架和相關OS庫(如Vaadin Spring)的產品市場主管,但是我的工作更像是針對開發者的宣傳人員。我撰寫版本發布博客、編寫使用Vaadin與其他有趣Java技術進行集成的樣例項目、發布技術文章、主辦webinar、參加會議(參與演講和作為展臺工作人員)、幫助新用戶和客戶進行Vaadin開發并幫助我們的工程師以及其他人員進行技術營銷工作。我對OSS非常有熱情,非常榮幸我能夠從事OS相關的工作,而我的同事會負責Vaadin相關的商業擴展。

InfoQ:和其他的Java Web框架相比,Vaadin的與眾不同之處是什么呢?

Tahvonen:Vaadin對Web技術有著最強的抽象。使用Vaadin框架編寫應用并不需要我們接觸一行JS、HTML或CSS代碼(如果你想這樣做的話,也是可以的),我們也不需要理解瀏覽器的技巧或各種形式的HTTP通信技術(如基本HTTP、表單提交、AJAX、服務端推送、WebSocket等)。如果你想編寫自定義擴展的話,才需要接觸底層的Web編程技術,我們有很活躍的社區和 上百個add-on ,所以這種場景是很少見的。在最常見的情況下,我們只需使用簡單的Java和基于組件的編程模型,這樣能讓開發更簡單和高效。具有桌面UI(Swing、SWT、JavaFX)經驗的開發人員或后端開發人員對于Vaadin會感到特別興奮,不過也有PHP背景的人對Vaadin非常感興趣。

InfoQ:你對Vaadin和UI的看法是怎樣的,它們該如何適應微服務模式呢?

Tahvonen:最近這段時間以來,這是一個非常常見的問題。Vaadin對微服務適配得非常好,一般而言,應用中始終會有UI,至少會存在某種形式的UI。在UI方面,會有多種策略,最佳方案要取決于你的需求。如果你的服務中具有UI,或者使用Vaadin + (REST)服務來構建管理端UI,讓這些服務供其他的應用消費,那么Vaadin非常適用于這種場景。另外,Java也是消費REST服務的理想工具(沒有同源的限制),在創建mash-up應用的時候,會消費多個微服務的數據,所以在這種情況下,Vaadin也能運行良好。

最近,很多用戶都提出了這個問題,我們決定針對這個話題編寫一些內容和樣例。我和我的同事 Alejandro 已經編寫了 第一篇文章 。后續還有很多內容和樣例要發布。

InfoQ:關于Vaadin和/或Vaadin Spring,你們目前的規劃是什么呢?

Tahvonen:毫無疑問,Vaadin 8是接下來最重要的事情。在Vaadin中,當前的一些API起源非常早,那個時候還沒有lambdas表達式,這些API甚至要早于泛型或JDK中特有的集合框架。Vaadin 8將會是一個巨大的進步,會讓代碼更加類型安全、易于編寫,在CPU和內存使用方面會更加高效。對于Vaadin Spring來說,也會有更新的版本。

因為我們非常重視向后兼容性(大多數的Vaadin應用會長期維護),我們準備了一個兼容包,借助它能夠非常容易地進行升級,你可以漸進式采用新的API。同時,Vaadin 7版本將會繼續支持,因為我們的一些客戶還不能遷移到Java 8上,有些甚至還要支持IE 8。

我們目前處于beta階段,第一個beta版本在圣誕節假期前已經發布:

https://vaadin.com/blog/-/blogs/vaadin-8-beta-is-out-we-need-your-help-

至于Vaadin Spring,我們計劃為Spring Security提供一些輔助功能。大多數的Vaadin Spring用戶都會同時使用Spring Security,通過一些更深入的集成,我們相信能夠讓客戶的起步更簡單一些。

InfoQ:與原生的JavaScript框架相比,例如AngularJS或ReactJS,它的性能/響應性如何呢?

Tahvonen:在著手評估Vaadin的時候,很多開發人員都會擔心這個問題。我建議他們親自嘗試一下。如果session存儲在服務器的內存中(通常如此),服務器的基本訪問是很快的,除非服務器的位置在地球的另一端。我們可以看一下如今的Google搜索,每當鍵盤按下的時候,它都會訪問服務器,但它依然非常流暢。

在與亞馬遜的專家一起構建的一個樣例中,我們使用了他們的地理負載均衡功能,成功玩了一個基于Vaadin的俄羅斯方塊游戲,它運行在一個位于悉尼的EC2微實例上(我位于芬蘭)。此時,它已經不是那么流暢了(相對于部署在同一個大洲的服務器來說),但是對于正常的業務應用來說,它能夠運行地非常好。通過啟用WebSocket,我們持續地開啟通信通道(在Vaadin中,需要添加一項依賴并且要在 UI 類上添加 @Push 注解),這樣能夠進一步減少延遲。

除了服務器往返(roundtrip)所造成的延遲,人們還應關注瀏覽器渲染所造成的延遲,以及執行實際的業務邏輯或數據庫查詢所造成的延遲,這一點與使用Angular和React是相同的。不管是Vaadin還是客戶端的UI框架,我都建議為長時間運行的查詢展示一些進度指示器或對話框,不要讓UI看起來像停滯了一樣。

 

 

來自:http://www.infoq.com/cn/news/2017/01/vaadin-releases-vaadin-spring

 

 本文由用戶 欠債3649元 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!