首頁 > 科技

為開發者準備的黑客馬拉松Java工具

2021-06-25 14:25:34

黑客馬拉松比賽(Hackathon competitions)可謂最能激勵開發人員自行創建解決方案的有效方法之一。不過,該領域目前尚屬冷門,開發人員對於整個比賽、乃至與之相關的概念與工具可能並不熟悉。在本文中,我將向您介紹有哪些黑客馬拉松的Java工具,可以簡化開發的過程,並提高程式碼的整體效率。

什麼是黑客馬拉松?

黑客馬拉松通常是指在給定的時間範圍內(如24或48小時),參賽者成功地解決某個問題,並交付出對應的應用程式的過程。它通常會涉及到如下環節:

  • 招募並組建團隊去參加比賽活動。

  • 比賽組織者通知參與者,有關黑客馬拉松的具體主題。

  • 團隊通過協商,決定準備編寫何種應用程式。

  • 團隊在給定的時間內交付出應用程式,組織者判斷輸贏。

經典的Java企業級應用框架

在大多時候,參賽團隊的大量時間往往會被浪費在配置等繁瑣的過程中。為此,他們在比賽期間,通常會通過選擇如下圖所示的經典Java企業級應用框架,來搭建出最簡單的程式架構,進而節省大量的開發時間。

常見的Java EE應用架構

使用者介面(User Interface,UI)

使用者介面對於絕大多數項目而言,都是不可或缺的重要部分。眾所周知的一項基本原則是:UI不應過於酷炫,而應講求的是實用。正如前面提到的,對於快速原型設計而言,團隊需要擁有一個帶有現成元件的框架庫。在此,我向您推薦React,及其時下流行、且含有大量React庫的material UI

Material UI的概覽圖

當然您也可以使用諸如:Vaadin、ZK、以及GWT等,通過Java生成和創建JavaScript使用者介面的框架。

Java類的UI框架

HTTP API以及UI的通訊方式

注意,HTTP並非唯一的通訊方式,根據某些項目的實際需求,我們可能需要使用websockets來實現快速的通訊。目前,業界有著許多可實現快速構建HTTP API的實用工具。在此,我向您推薦Spring Boot Web。它提供了豐富的功能,以便使用者輕鬆地轉換和解析各種HTTP請求。

Spring Boot Web的示例截圖

業務邏輯

雖然這是一個非常靈活多變的部分,但實際上,業務層是一個針對服務或資料儲存庫的,能夠起到承上啟下的關鍵性作用層。該領域常用的工具包括:帶有依賴注入(Dependency Injection,DI)和控制反轉(Inversion of Control,IOC)模式的Google Juice。當然自己也可以自行進行編寫業務邏輯。不過,我仍然會推薦您使用Spring Framework。

使用Spring Framework的業務邏輯

雲端API

有了前面的業務邏輯,我們可以引入各種服務了。如您所知,雲服務提供了大量不同的API。其中,以AWS、Google Cloud、以及Azure為首的平臺,都能夠提供涵括了從語音識別到機器學習等應用領域的工具。不過,它們雖然功能強大,但是往往會持續向用戶收費。因此您需要在構建應用程式時,慎重呼叫由它們提供的API邏輯。

雲端API服務示例

實用的工具和庫

在應用實現的過程中,為了避免重複造輪子,您可以使用諸如:Apache Commons或Guava Collections等不同的流行程式碼庫。

實用的工具和庫

資料庫連線

最直接且最常用的連線SQL資料庫的方案,當屬使用諸如:Apache JDBC模板或Spring模板等JDBC包裝器。不過,由於黑客馬拉松比賽的時間有限,因此開發者經常會使用Spring Data,來實現資料訪問物件(Data Access Object,DAO)的快速設計。Spring Data能夠為各種SQL、以及NoSQL資料來源,提供多種介面卡和解決方案。在下面的程式碼例子中,我們採用了Spring Data JPA,為各種類提供開箱即用的CRUD(新增Create、檢索Retrieve、更新Update和刪除Delete)、以及查詢操作。

Java

public interface UserDao extends JpaRepository<User, Long> {       User findUserById(Long id);   }

因此,其基本流程是:

1. 生成與自己的資料表相匹配的類實體。

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的前提下,應用程式能夠通過ID去讀取使用者。一旦得以實現,下一個端點也就隨即可用了:

純文字

{   "_links" : {     "users" : {       "href" : "http://localhost:8080/users{?page,size,sort}",       "templated" : true     } }

資料庫的準備

為了簡化資料庫的設計過程,您可以通過使用SqlYog應用,來生成表結構模式(schema)。在此基礎上,您可以繼續使用IntelliJ IDEA,來生成各種實體類。

資料庫的準備:SqlYog和IntelliJ IDEA

JMS或排程程式

在討論了業務邏輯或服務之後,我們需要重點考慮同步和非同步的實現問題。通常,我們可以通過以Topic和Queue Pattern為代表的Java訊息佇列,來配合RabbitMQ、Active MQ或Kafka等工具予以解決。當然,無論採用哪種工具,您都需要花些時間,通過對它們進行額外的配置,才能運行並實現訊息的代理。

JMS 或排程程式方案的示例

非同步解決方案:Spring Quartz

幸運的是,大多數非同步問題都可以通過各種簡單的排程(scheduling)和觸發(triggering)模式,來予以解決。

簡單快速的部署:Docker

Docker不僅是一個可用於快速部署應用程式的解決方案,而且還是一個擁有大量現成框架的百寶箱。您可以通過它,輕鬆地運行各種類型的預配置解決方案。

小結

正如《唐·吉訶德》的作者Miguel de Cervantes所言:「好的準備就已經勝利了一半」。希望上述有關Java工具的介紹與推薦,能夠幫助您更加從容地參加黑客馬拉松比賽,並取得好成績。


IT145.com E-mail:sddin#qq.com