关于java:面试官什么是脚手架为什么需要脚手架常用的脚手架有哪些

42次阅读

共计 4398 个字符,预计需要花费 11 分钟才能阅读完成。

微服务自身是一种架构格调,也是领导组织构建软件的一系列最佳实际汇合。然而,业务团队在拆分利用后,会产生更多细粒度服务,并面临这些服务在分布式网络环境中的复杂性。如何分心实现业务逻辑而不陷入微服务架构的技术细节,对开发者来说是一大难题。

本章将介绍脚手架的概念,并介绍 JVM 环境下在技术成熟度、架构完整性、生态活跃度等方面都占据劣势的微服务脚手架我的项目:SpringBoot。

脚手架介绍

什么是脚手架

脚手架是一种用在修建畛域的辅助工具,或者说是为了保障各施工过程顺利进行而搭设的工作平台,有趣味的读者可自行查看维基百科上的定义。

对应到软件工程畛域,脚手架能够解释为帮忙开发人员在开发过程中应用的开发工具、开发框架,应用脚手架你毋庸从头开始搭建或者编写底层软件。上面的“脚手架”定义来自 Stack Overflow,更加偏差于应用服务框架应用的一种编程思维或者说编程范式(供参考)。

脚手架:是一种元编程的办法,程序员编写一份规格说明书(Specification),用来形容怎么去应用数据库,而后由编译器脚手架依据这份规格说明书生成相应的代码,进行增、删、改、查等数据库的操作,在脚手架上更高效地建造出弱小的利用。

为什么须要脚手架

为什么软件开发须要脚手架呢?咱们通过软件开发的一些根本准则看一下脚手架对软件工程的重要作用。

● 复用准则(Reuse Principle):当初咱们推崇的是极致化的编程体验,缩短的开发工夫、大量的开发工作、反对需要的变更、高频率的应用服务交付,这些都给软件开发人员带来了前所未有的压力。其中,软件复用技术被公认为解决这些问题的卓有成效的办法。从计算机软件编程的倒退历史来看,从面向过程的编程语言到面向对象的高级编程语言的宽泛应用,是软件复用技术提高的体现。从对象的复用到更大的组件复用,再到现在的框架的复用、服务的复用,都是在利用别人的优秀成果来放大你的工作价值。当一个老手应用脚手架时,对于一个具体问题,能够套用现成的解决方案加以扩大。应用脚手架的利用,仅需通过简略的注解和配置就能够具备衰弱状态查看、生产环境就绪、可观测等根本服务能力。对于一个业务逻辑问题,能够复用已有的逻辑,一步步迭代,麻利开发。

● DRY 准则(Don’t Repeat Yourself):DRY 准则直译过去就是“不要反复你本人”。这一准则和复用准则相似,强调尽量在我的项目中缩小反复的代码行、反复的办法、反复的模块。其实,软件设计准则和模式最实质的思维都是“打消反复”。

咱们常常提到的重用性和可维护性其实是基于缩小反复这一简略而重要的思维的。DRY 准则意味着零碎内的每一个部件都应该是惟一的,并且是具备明确含意的(不含糊的)。咱们能够通过利用职责繁多、接口隔离等准则尽量拆分零碎、模块、类和办法,使每一个部件都是职责明确并且可重复使用的。

● 开闭准则(Open Close Principle):开闭准则中的“开”就是指对性能的扩大是凋谢的,“闭”是指对于原有代码的批改是关闭的。艰深一点讲,软件系统通常是由各种模块组成的,软件系统在减少一项新的性能时,应该在不批改现有代码的根底上操作。实现开闭准则的要害就是“形象”,从宏观的角度讲,开闭准则实用于一个业务模型的类的设计,把零碎内的所有可能行为形象为一个形象底层,在这个形象底层中规定须要提供的办法接口,具体实现类通过集成、代理、委托的形式,扩大实现新的行为或者新的性能。从宏观的角度讲,咱们说开闭准则就是将公共模块、开发约定、最佳技术实际通过共享、提炼积淀到关闭的底层技术基座;而将变动频繁的业务模块、独特的性能逻辑通过继承、组合和集成的形式实现对扩大的凋谢。

不要从新造轮子

不要从新造轮子(Stop Reinventing The Wheel),这个准则能够说是软件开发里的“清规戒律”。在理论的软件工程场景中,脚手架的应用正是为了咱们防止从新造轮子。如果你不借助已有框架或者工具,不仅不会晋升开发效率,还会将本人陷入从新造轮子的危险中。这里举一个产生在自己参加的理论我的项目中的血淋淋的案例。

咱们在一个服务治理我的项目中须要在数据长久层实现一个通用的数据存储接入组件,初衷是升高利用接入不同数据存储引擎的复杂性,屏蔽使用者对不同长久层的感知差别,使开发者通过简略的配置就能适配不同的数据类型。另外,因为冀望齐全把握对长久层的管制,以及实现深度定制化的数据转换性能,所以咱们并没有应用 Spring 框架,而是走上了自研长久层的路线。如下图所示是自研长久层的 UML 框架图。

咱们别离对接了 MySQL、MongoDB、OpenTSDB、HBase 等数据源。零碎从架构设计到落地破费了大略两个月的工夫,还不包含前期的测试、对接、调试、修复 Bug 至多一个月的磨合期。然而,因为人员、教训、我的项目周期等各种因素,最终自研长久层框架的成果并没有达到预期,前期在与业务对接的过程中还呈现了各种技术和业务适配问题。

在通过一番技术调研后,咱们决定逐步应用 Spring Data 代替原有的自研长久层框架。通过我的项目的实际后,咱们发现在业务的需要满足性、易用性、开发效率、业务稳定性等各个方面,Spring Data 都具备压倒性的劣势,它不仅能够齐全满足业务和技术上的需要,而且能够简化咱们的开发工作、显著晋升工作效率。二者的复盘比照如下表所示。

Spring Data 我的项目通过应用对象的语义能够让咱们更不便地操作不同类型的数据。它将利用的骨架局部通过“形象”提取进去,造成了一套零碎的开发范式和行为模式。Spring Boot 脚手架也为自定义的简单查问、批改操作提供了扩大的 Repository 类和自动化配置,使增加定制化的扩大办法更加轻松不便。咱们只须要了解 Spring 为咱们提供的操作 API 接口,就能够实现简单的查问等业务逻辑。

Spring Data 将咱们的数据长久层框架进行了进一步的封装,开发者通过简略的注解,就能够实现将不同类型数据放到不同长久层汇合的存储映射操作。能够说,脚手架工程能够为开发人员屏蔽繁冗的数据存储引擎底层差别和具体工作细节,晋升了开发效率,升高了开发难度。除非你是这个畛域的专家,或者没有现成的软件脚手架可能满足你的需要,否则请进行“愚蠢地反复造轮子”的行为。

这里举荐一个 Spring Boot 根底实战教程:

https://github.com/javastacks…

罕用脚手架

上面列举一些软件开发中常常应用的脚手架,看一下如何通过脚手架进步咱们的开发效率。

Vue 框架

对于前端开发人员来说,Vue 无疑是一套简略的、易于应用的构建用户界面的前端脚手架。依据 Vue 的官网说法,Vue 是一套构建用户界面的渐进式的 JavaScript 框架。与其余重量级框架不同的是,Vue 采纳自底向上的增量开发的设计,Vue 的指标是通过尽可能简略的 API 实现响应的数据绑定和组合的视图组件。

vue-cli 脚手架构建工具,可用于疾速搭建大型单页利用。该工具提供“开箱即用”的构建工具配置,带来了现代化的前端开发流程。

只需几分钟即可创立并启动一个带热重载、保留时动态查看及可用于生产环境的构建配置的我的项目:

要创立基于 Webpack 模板的我的项目,首先咱们选定目录,而后在命令行中把目录转到选定的目录即可,能够应用上面的命令:

Maven

Maven 是一个跨平台的项目管理工具,是服务于 Java 平台的我的项目构建、依赖治理、我的项目信息管理工具。同时应用 Maven 能够标准我的项目骨架及包层次结构、命名配置文件、生成代码原型等。

Maven 提供了 archetype 插件来帮忙开发人员疾速勾画出我的项目的骨架,要应用本地 Maven 仓库中的脚手架创立新我的项目,间接执行如下 Maven 命令,依据提醒顺次输出 groupId、version、package 信息即可:

Maven 自动化构建简化了开发人员手动构建工程的过程,标准了我的项目的构建过程。Maven 自动化构建流程如下图所示。

Netty

Netty 是 JBoss 提供的一个 Java 开源框架。Netty 提供异步的、事件驱动的网络应用程序框架和工具,用以疾速开发高性能、高可用性的网络服务器和客户端程序。在 Java 世界中还没有 Netty 框架的时候,Java 自带的 NIO 非常复杂,并且还会呈现 Epoll Bug(代码缺点),这个 Bug 会触发 Selector 空轮询,导致 CPU 的使用率达到 100%。Netty 的解决形式是,在 N 次空轮询后主动敞开 Selector,防止了原生 NIO 的空轮询问题。而且 Netty 有很好的线程模型和内存治理框架,如下图所示是 Netty Reactor 工作架构图。

Java EE

Java EE 的全称是 Java 2 Platform Enterprise Edition,它是在 SUN 公司领导下,多家公司参加独特制订的企业级分布式应用程序开发标准。

Java EE 技术由一系列技术规范和技术组件组成,包含 RESTfulWeb Server(JAX-RS)、Jersey Rest 框架、Java Servelt、JMS、EJB 等。通常能够把满足这些规范的业务利用部署在 Tomcat、JBoss 等 Web 服务器上运行。

DropwizardDropwizard 只需通过简略配置就能让你的类提供 RESTful 服务。

Dropwizard 是一个微服务框架,是各项技术的一个集成封装,它蕴含以下组件:

● 嵌入式 Jetty:一个应用程序被打包成一个 jar 文件,并应用本人嵌入的 Jetty 容器。除此之外,无任何其余 war 文件和内部 Servlet 容器。

● JAX-RS:Jersey,用来写基于 REST 的 Web 服务。

● JSON:REST 服务数据传递解决全副用 JSON,应用 Jackson 库。

● 日志:应用 Logback 和 SLF4。

● 数据库:应用 Hibernate 集成 ORM 框架。

● 指标:应用 Metrics 作为指标度量工具,在 Java 代码中嵌入 Metrics 代码,能够不便地对业务代码的各个指标进行监控,同时 Metrics 可能很好地跟 Ganlia、Graphite 联合,不便地提供图形化接口。

在微服务架构畛域,Dropwizard 能够说是晚期脚手架的一个代表,然而 Spring Boot 青出于蓝而胜于蓝,在 Spring 弱小和成熟的技术生态下,Spring Boot 展示进去的个性更加优雅,也更加符合以后微服务架构的理念。

起源:https://www.toutiao.com/a7004…

近期热文举荐:

1.1,000+ 道 Java 面试题及答案整顿 (2022 最新版)

2. 劲爆!Java 协程要来了。。。

3.Spring Boot 2.x 教程,太全了!

4. 别再写满屏的爆爆爆炸类了,试试装璜器模式,这才是优雅的形式!!

5.《Java 开发手册(嵩山版)》最新公布,速速下载!

感觉不错,别忘了顺手点赞 + 转发哦!

正文完
 0