【51CTO.com快译】黑客马拉松比赛(Hackathon competitions,请参见--https://en.wikipedia.org/wiki/Hackathon)可谓最能激励开发人员自行创建解决方案的有效方法之一。不过,该领域目前尚属冷门,开发人员对于整个比赛、乃至与之相关的概念与工具可能并不熟悉。在本文中,我将向您介绍有哪些黑客马拉松的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(https://spring.io/)。
使用Spring Framework的业务逻辑
云端API
有了前面的业务逻辑,我们可以引入各种服务了。如您所知,云服务提供了大量不同的API。其中,以AWS、Google Cloud、以及Azure为首的平台,都能够提供涵括了从语音识别到机器学习等应用领域的工具。不过,它们虽然功能强大,但是往往会持续向用户收费。因此您需要在构建应用程序时,慎重调用由它们提供的API逻辑。
云端API服务示例
实用的工具和库
在应用实现的过程中,为了避免重复造轮子,您可以使用诸如:Apache Commons或Guava Collections等不同的流行代码库。在此,您可以参考如下实用的链接:
- Maven的官方库列表
- Java的十大实用库
- GitHub有关Java的存储库-- https://github.com/akullpp/awesome-java
实用的工具和库
数据库连接
最直接且最常用的连接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)模式,来予以解决。在实践中,您可以使用由Spring提供的Quartz 解决方案,具体内容请参见--https://docs.spring.io/spring-boot/docs/2.0.0.M3/reference/html/boot-features-quartz.html。
简单快速的部署:Docker
Docker不仅是一个可用于快速部署应用程序的解决方案,而且还是一个拥有大量现成框架的百宝箱。您可以通过它,轻松地运行各种类型的预配置解决方案。
小结
正如《唐·吉诃德》的作者Miguel de Cervantes所言:“好的准备就已经胜利了一半”。希望上述有关Java工具的介绍与推荐,能够帮助您更加从容地参加黑客马拉松比赛,并取得好成绩。
原文标题:Hackathon Java Tools for Developers,作者: Dmitry Egorov
【51CTO译稿,合作站点转载请注明原文译者和出处为51CTO.com】