简单性有很大的价值。当事情很简单时,它们更容易理解、更容易扩展和更容易修改。他们是更好的。简洁是对架构或框架的终极褒奖。 在本文中,我将研究四个不同的框架—-Spring Boot, Javalin, Vert.x 和 Micronaut。
来寻求简单的方法。
我写这篇文章的灵感之一是Rich Hickey的一篇精彩的演讲,题目是《简单易做》。
这是这次演讲的幻灯片,突出了简单和容易的区别:
简单容易,但不是一回事。简单是复杂的反义词,容易是困难的反义词。
我不会在这里重复整个演讲(我真的建议你自己去看),但要强调几点:
让我们来看看Java框架中简单和复杂的历史。
在转到微服务框架之前,让我们先看看从哪里开始。
在微服务出现之前,我们有两种主要的方法用于用Java编写的大型服务器端应用程序:Enterprise Java和Spring框架:
我认为这两种框架既困难又复杂,当然,通过很好地理解Spring或JavaEE并学习如何使用它们,您可以使它们变得“简单”,但这并不能消除底层的复杂性。
似乎我并不是唯一一个认为这些都是问题的人,因为JavaEE(目前的Jakarta EE)社区正忙于MicroProfile的工作,Spring的爱好者们很快会把我引向了Spring Boot项目。
这里我不将重点放在MicroProfile上,因为它仍然相对较新的,Java EE到Jakarta EE的转换正在进行中。如果您感兴趣,我建议您检查Jakarta EE官方网站、MicroProfile官方网站及其GitHub资源库。
谁不喜欢Spring Boot呢?好吧,这是互联网,所以我敢肯定有相当一部分人不会!不管怎么说,Spring Boot是企业世界的游戏规则改变者。编写服务变得非常简单。
Spring Boot还通过将庞大的Spring生态系统划分为可组合的小部分来提供简单性。自动配置是消除服务开发人员巨大复杂性的法宝。
你想知道自动配置是如何工作的吗?查看2.0.3.RELEASE的源代码。它非常复杂,但完全由框架团队管理。他们决定吸收这种复杂性,并在这方面做得很好!
那么Spring框架本身呢?它可能非常复杂,但也非常健壮。选择实际上取决于开发人员——包括哪些内容,以及应该远离哪些内容。
我认为Spring Boot简单性如下:
当处理非常困难的问题时,这种方法被证明是成功的。让我们看看其他框架。
Micronaut要比Spring Boot年轻得多。在写作的时候,我们的版本是1.0.0。M1,所以有很大的变化空间。
Micronaut自称是:
用于构建模块化、易于测试的微服务应用程序的现代、基于jvm的全栈框架。
它与Spring Boot有许多相似之处。我们有:
是什么让Micronaut有趣呢?再次提到Micronaut文件:
我会加上我自己——它是从头开始写,头脑简单。问题是——随着框架的成熟,它会变得过于类似于Spring Boot吗?
这是一个新项目是它最大的优点也是最大的风险。当然,它并不依赖于可能的沉重和复杂的Spring,但与此同时,Spring是健壮的、受欢迎的和工作良好的。
我看到Micronaut的简单方法:
我真的很喜欢Micronaut,因为它可以与Spring Boot的竞争。它尝试了一种非常类似的方法,但从一开始就考虑使用微服务进行更精简和编写。
如果你想达到终极的简单性,你会怎么做?
如果您希望使您的微服务变得非常简单,那么您应该查看微框架。或者你应该这样做吗?让我们将Javalin作为microframework家族的一个示例。
那么,是什么让Javalin如此简单呢?它只有大约2000行源代码。它确实是一个微框架。有了这样一个简化的代码库,您可以实现真正的简单性。如果您有任何困难,源代码足够简单,可以理解和修复。
这种简单的代价是什么?Javalin没有Spring Boot提供的那么多。您没有Javalin数据(我的Spring数据介绍)或Javalin数据流(我的Spring云数据流)之类的项目。您甚至没有依赖注入!
轻量级有问题吗?这是个有趣的问题。现在,有了Kubernetes、Service Mesh和其他微服务技术,对服务本身的复杂性的需求就减少了。我写过关于微框架的兴起,我相信我们正在见证这一趋势的开始!
我认为Javalin的简单方法是:
您能将Javalin方法的简单性和风格与功能更全面的框架结合起来吗?相信你可以!我们将在Vert.X上完成这个展示。
VertX是这里提到的第二大流行框架(Spring Boot之后)。它不仅针对微服务(Spring Boot也不针对微服务),它将自己描述为:
Eclipse Vert.x 是用于在JVM上构建反应性应用程序的工具包。
反应/功能方法的核心是简单。它很简单,但不容易。我们需要一些时间来理解,也许还需要将我们的方法从非功能性世界中转移出来。
在我看来,Javalin似乎是一种简单的方式,可以将您的脚趾浸入到这种风格和风格中。X提供更成熟的企业产品。两者都是伟大的,而且绝对是有意义的。即使是Spring Boot也在尝试使这个反应/功能模型可行。
如果您想了解在Vert.x中编写一个简单的REST服务是什么样子的。在GitHub上有很好的例子。
我看到了Vert.X简单方法如下:
框架完全围绕反应/功能模型构建
提供可以与更传统的企业产品竞争的特性列表
为了简单的本质,牺牲了进入的轻松
将框架分割成许多可组合的部分
如果你不害怕一些最初的困难,为了处理一些简单的东西的核心,Vert.X是一个有趣的选择!
有许多可用的微服务框架和方法。比我在这里评论的要多。他们每个人都努力使开发变得简单和容易。这些方法之间存在着权衡,不同的权衡将吸引不同的受众。
我希望本文能给您提供一种看待框架和开发方法的不同方式,并可能激励您尝试一些困难但简单的东西!