為開發(fā)者準備的黑客馬拉松Java工具
譯文【51CTO.com快譯】黑客馬拉松比賽(Hackathon competitions,請參見--https://en.wikipedia.org/wiki/Hackathon)可謂最能激勵開發(fā)人員自行創(chuàng)建解決方案的有效方法之一。不過,該領(lǐng)域目前尚屬冷門,開發(fā)人員對于整個比賽、乃至與之相關(guān)的概念與工具可能并不熟悉。在本文中,我將向您介紹有哪些黑客馬拉松的Java工具,可以簡化開發(fā)的過程,并提高代碼的整體效率。
什么是黑客馬拉松?
黑客馬拉松通常是指在給定的時間范圍內(nèi)(如24或48小時),參賽者成功地解決某個問題,并交付出對應(yīng)的應(yīng)用程序的過程。它通常會涉及到如下環(huán)節(jié):
- 招募并組建團隊去參加比賽活動。
- 比賽組織者通知參與者,有關(guān)黑客馬拉松的具體主題。
- 團隊通過協(xié)商,決定準備編寫何種應(yīng)用程序。
- 團隊在給定的時間內(nèi)交付出應(yīng)用程序,組織者判斷輸贏。
經(jīng)典的Java企業(yè)級應(yīng)用框架
在大多時候,參賽團隊的大量時間往往會被浪費在配置等繁瑣的過程中。為此,他們在比賽期間,通常會通過選擇如下圖所示的經(jīng)典Java企業(yè)級應(yīng)用框架,來搭建出最簡單的程序架構(gòu),進而節(jié)省大量的開發(fā)時間。
常見的Java EE應(yīng)用架構(gòu)
用戶界面(User Interface,UI)
用戶界面對于絕大多數(shù)項目而言,都是不可或缺的重要部分。眾所周知的一項基本原則是:UI不應(yīng)過于酷炫,而應(yīng)講求的是實用。正如前面提到的,對于快速原型設(shè)計而言,團隊需要擁有一個帶有現(xiàn)成組件的框架庫。在此,我向您推薦React,及其時下流行、且含有大量React庫的material UI。
Material UI的概覽圖
當然您也可以使用諸如:Vaadin、ZK、以及GWT等,通過Java生成和創(chuàng)建JavaScript用戶界面的框架。
Java類的UI框架
HTTP API以及UI的通信方式
注意,HTTP并非唯一的通信方式,根據(jù)某些項目的實際需求,我們可能需要使用websockets來實現(xiàn)快速的通信。目前,業(yè)界有著許多可實現(xiàn)快速構(gòu)建HTTP API的實用工具。在此,我向您推薦Spring Boot Web。它提供了豐富的功能,以便用戶輕松地轉(zhuǎn)換和解析各種HTTP請求。
Spring Boot Web的示例截圖
業(yè)務(wù)邏輯
雖然這是一個非常靈活多變的部分,但實際上,業(yè)務(wù)層是一個針對服務(wù)或數(shù)據(jù)存儲庫的,能夠起到承上啟下的關(guān)鍵性作用層。該領(lǐng)域常用的工具包括:帶有依賴注入(Dependency Injection,DI)和控制反轉(zhuǎn)(Inversion of Control,IOC)模式的Google Juice。當然自己也可以自行進行編寫業(yè)務(wù)邏輯。不過,我仍然會推薦您使用Spring Framework(https://spring.io/)。
使用Spring Framework的業(yè)務(wù)邏輯
云端API
有了前面的業(yè)務(wù)邏輯,我們可以引入各種服務(wù)了。如您所知,云服務(wù)提供了大量不同的API。其中,以AWS、Google Cloud、以及Azure為首的平臺,都能夠提供涵括了從語音識別到機器學習等應(yīng)用領(lǐng)域的工具。不過,它們雖然功能強大,但是往往會持續(xù)向用戶收費。因此您需要在構(gòu)建應(yīng)用程序時,慎重調(diào)用由它們提供的API邏輯。
云端API服務(wù)示例
實用的工具和庫
在應(yīng)用實現(xiàn)的過程中,為了避免重復造輪子,您可以使用諸如:Apache Commons或Guava Collections等不同的流行代碼庫。在此,您可以參考如下實用的鏈接:
- Maven的官方庫列表
- Java的十大實用庫
- GitHub有關(guān)Java的存儲庫-- https://github.com/akullpp/awesome-java
實用的工具和庫
數(shù)據(jù)庫連接
最直接且最常用的連接SQL數(shù)據(jù)庫的方案,當屬使用諸如:Apache JDBC模板或Spring模板等JDBC包裝器。不過,由于黑客馬拉松比賽的時間有限,因此開發(fā)者經(jīng)常會使用Spring Data,來實現(xiàn)數(shù)據(jù)訪問對象(Data Access Object,DAO)的快速設(shè)計。Spring Data能夠為各種SQL、以及NoSQL數(shù)據(jù)源,提供多種適配器和解決方案。在下面的代碼例子中,我們采用了Spring Data JPA,為各種類提供開箱即用的CRUD(添加Create、檢索Retrieve、更新Update和刪除Delete)、以及查詢操作。
Java
- public interface UserDao extends JpaRepository<User, Long> {
- User findUserById(Long id);
- }
因此,其基本流程是:
1. 生成與自己的數(shù)據(jù)表相匹配的類實體。
2. 擴展Spring Data的各種接口,并使用它們。
Spring REST Data
而Spring Rest Data解決方案不僅能夠為存儲庫生成 CRUD操作,還可以通過UI提供和公布帶有CRUD的HTTP端點。例如:
- @RepositoryRestResource
- public interface UserRepository extends PagingAndSortingRepository<User, Long> {
- List<User> findByName(@Param("id") Long id);
- }
在提供了HTTP API的前提下,應(yīng)用程序能夠通過ID去讀取用戶。一旦得以實現(xiàn),下一個端點也就隨即可用了:
純文本
- {
- "_links" : {
- "users" : {
- "href" : "http://localhost:8080/users{?page,size,sort}",
- "templated" : true
- }
- }
數(shù)據(jù)庫的準備
為了簡化數(shù)據(jù)庫的設(shè)計過程,您可以通過使用SqlYog應(yīng)用,來生成表結(jié)構(gòu)模式(schema)。在此基礎(chǔ)上,您可以繼續(xù)使用IntelliJ IDEA,來生成各種實體類。
數(shù)據(jù)庫的準備:SqlYog和IntelliJ IDEA
JMS或調(diào)度程序
在討論了業(yè)務(wù)邏輯或服務(wù)之后,我們需要重點考慮同步和異步的實現(xiàn)問題。通常,我們可以通過以Topic和Queue Pattern為代表的Java消息隊列,來配合RabbitMQ、Active MQ或Kafka等工具予以解決。當然,無論采用哪種工具,您都需要花些時間,通過對它們進行額外的配置,才能運行并實現(xiàn)消息的代理。
JMS 或調(diào)度程序方案的示例
異步解決方案:Spring Quartz
幸運的是,大多數(shù)異步問題都可以通過各種簡單的調(diào)度(scheduling)和觸發(fā)(triggering)模式,來予以解決。在實踐中,您可以使用由Spring提供的Quartz 解決方案,具體內(nèi)容請參見--https://docs.spring.io/spring-boot/docs/2.0.0.M3/reference/html/boot-features-quartz.html。
簡單快速的部署:Docker
Docker不僅是一個可用于快速部署應(yīng)用程序的解決方案,而且還是一個擁有大量現(xiàn)成框架的百寶箱。您可以通過它,輕松地運行各種類型的預配置解決方案。
小結(jié)
正如《唐·吉訶德》的作者Miguel de Cervantes所言:“好的準備就已經(jīng)勝利了一半”。希望上述有關(guān)Java工具的介紹與推薦,能夠幫助您更加從容地參加黑客馬拉松比賽,并取得好成績。
原文標題:Hackathon Java Tools for Developers,作者: Dmitry Egorov
【51CTO譯稿,合作站點轉(zhuǎn)載請注明原文譯者和出處為51CTO.com】