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