本文将向大家介绍一个代码结构检查的神器 - - ArchUnit。在正式介绍ArchUnit之前,先请大家思考一下:
在今年的敏捷团队建设中,我通过Suite执行器实现了一键自动化单元测试。Juint除了Suite执行器还有哪些执行器呢?由此我的Runner探索之旅开始了!
ArchUnit是一个基于 Java 的测试库,用于检查代码的结构特性,如包和类的依赖关系、注解验证,甚至还能检查代码分层是否一致。我们很喜欢 ArchUnit 的地方是,它可以在现有的测试环境中以单元测试的方式运行,尽管只支持基于 Java 的架构。在CI环境或部署流水线中集成ArchUnit 测试套件,可以方便地在演进式架构中实现架构适应度函数。
Archunit是什么,官网的英文介绍很好,建议阅读原文,"ArchUnit is a free, simple and extensible library for checking the architecture of your Java code using any plain Java unit test framework. That is, ArchUnit can check dependencies between packages and classes, layers and slices, check for cyclic dependencies and more"。
Code Review总是让人又爱又恨,它可以帮助我们在提测之前发现很多代码中比较“丢人”的问题,但是,Code Review通常会比写代码更加耗费精力,因为你需要理解别人的代码,而为了这一目的,往往需要很多次的沟通。
最近在做一个新项目的时候引入了一个架构方面的需求,就是需要检查项目的编码规范、模块分类规范、类依赖规范等,刚好接触到,正好做个调研。
PS:本文只是先开个头,思考如何应对这种挑战。 如果只是从系统来考虑,标题里虽然说的是 “分布式” 规范治理,但是更多的时候是指多仓库的规范治理。而多仓库本身也充斥着一些不合理性,诸如于一个代码仓库内,可能包含着多个模块,如 monorepo。从这个角度来看,只是讨论分布式系统,可能有一些单薄。但是呢,我们在写规范,针对的是系统吗?难道不是团队中的开发人员?所以,我们所想的治理的是分布式协作的规范性问题。 回顾开发规范及其工具化 对于软件研发来说,效能的提升是一个非常宏大的史诗级话题,在这个话题里,规范的建
早先呢,我只是因为使用 Java 编写的 ArchUnit 不支持其它语言,而在其它语言的生态里呢,也没有这样的合适的工具。所以呢,我就想着在 Uncode 里设计一个全新的架构守护工具,也就是 Inherd 开源小组里的 Guarding:https://github.com/inherd/guarding/,一个多语言的架构守护工具 —— 基于 Tree Sitter 解析各类编程语言。它设计了一套外部 DSL,其借鉴于 ArchUnit 设计的内部 DSL 语法。
这是一篇姗姗来迟的文章 ,我本应该紧接着在《架构守护代码化:架构文档即测试》一文之后,详细介绍我们在 Uncode 中引入的『架构守护代码化』工具 Guarding。不过呢,从时间点上来看,现在也不算太晚,笑。
作者 | Michael Redlich 译者 | 平川 策划 | 晓昀 本期 Java 近期新闻综述内容主要涉及 OpenJDK、JDK 20、Spring 里程碑更新、Eclipse Tumerin 19、OmniFaces 4.0、PrimeFaces 12.0、OmniFish 简介、Quarkus 2.13.1、Oracle 加入 Micronaut 基金会、Eclipse Vert.x 4.3.4、JobRunr 5.3、Apache Tomcat 9.0.68、Apache Came
几天前,我发表了文章《Twitter的问题说明再好的软件也会腐化》,文中提到避免软件腐化的三种有效手段,其中之一是持续测试。
应对于这些问题,其中的一个解决方案就是:自动化的工具,有些人喜欢称之为器。支撑这些工具的便是一系列的原则与模式,将它们融入到工具之中。另外一个解决人成长的方案就是:元元(meta-meta),这是另外一个故事。
ThoughtWorks每年都会出品两期技术雷达,这是一份关于科技行业的技术趋势报告,在四个象限:技术、平台、工具以及语言和框架对每一个条目(Blip)做采用、试验、评估、暂缓的建议。(参考阅读:解读技术雷达的正确姿势)
# spring-dubbo-service 微服务 项目地址:https://github.com/windwant/spring-dubbo-service spring dubbo servic
在过去的几年里,我一直从事于各种领域定义语言的设计,包含 unflow、guarding、datum、forming 等。在我刚入门这个领域的时候,我从《领域特定语言》、《编程语言实现模式》 等,一直研究到龙书等。我渐渐掌握了领域特定语言设计的一些技巧,也能快速(相对于过去)设计出一个领域特定语言。
还记得 Uncode 吗?用于落地我构思的整个云研发体系的 IDE,如果不记得的话,请访问『流程即代码:低代码 & 云研发 IDE —— Uncode』。它来了,现在来了。
架构即代码,是一种架构设计和治理的思想,它围绕于架构的一系列模式,将架构元素、特征进行组合与呈现,并将架构决策与设计原则等紧密的与系统相结合。 如我的上一篇文章《为“架构”再建个模:如何用代码描述软件架构?》中所说,要准确描述软件的架构是一件颇具难度的事情。仅就实现的层面来说,也已经很难通过一个标准模型来让所有人达成一致,“哦,这就是架构”。也因此,在无法定义架构的情况下,也很难无法给出一个让所有人信服的架构治理模型。毕竟:模型只有合适的,永远没有对的。 ( 示例代码见:https://github.com
UnitGen 是我们从 UnitEval 拆分出来的代码数据集生成项目,旨在为基于开源模型供的私有化部署提供更好的编码数据集。
ThoughtWorks每年都会出品两期技术雷达,这是一份关于技术趋势的报告,由 ThoughtWorks 技术战略委员会(TAB)经由多番正式讨论给出,它以独特的雷达形式对各类最新技术的成熟度进行评估并给出建议,为从程序员到CTO的利益相关者提供参考。
架构自治服务是一种面向架构分析领域的数据自助服务。它提供了一种集成一体的数据分析方案,让开发人员、架构师、管理者等可以根据不同任务,自由搭配、组合出适用于自身洞察需求的任务/函数。 最近,刚好看到两本书名非常有意思的书:《持续 API 管理》、《数据自助服务实践指南》,前者书的内容对不起大纲,后者书的标题对不起内容 —— 内容是好内容,但是标题不对。原书的标题是《The Self-Service Data Roadmap》,重点在于介绍各种数据自助服务的模式和路线图。 回到正题上来,这两本书的书名让我开始思
一种流行的方法是通过技术层面对项目进行分包。但是这种方法有一些缺点。相反,我们可以按功能分包并创建独立自治的程序包。结果是一个易于理解且不易出错的代码库。
我对于无代码编程的研究也有些年头了,从国内最早的『无代码编程』相关的文章,到最近的『流程即代码:云研发 IDE Uncode』,我大抵是有资格再聊聊这个行业。
作者 | Karsten Silz VMware 推出了一个实验性的项目 Spring Modulith,以便于通过模块和事件更好地组织 Spring Boot 3 应用。该项目引入了新的类和注解,但并不会生成代码。它的模块没有使用 Java Platform Module System(JPMS),而是映射到了普通的 Java 包。模块有 API,但是 Spring Modulith 鼓励使用 Spring 应用事件作为“主要的交互方式”。这些事件可以自动持久化到事件日志中。Spring Modulit
Tech 导读 分层单体架构风格是分层思想在单体架构中的应用,其关注于技术视角的职责分层。同时,基于不同层变化速率的不同,在一定程度上控制变化在系统内的传播,有助于提升系统的稳定性。但这种技术视角而非业务视角的关注点隔离,导致了问题域与工程实现之间的Gap,这种割裂会导致系统认知复杂度的提升。
基本定义,关于技术债的定义,维基百科的解释是:由于现在选择简单(有限)解决方案而不是使用需要更长时间的更好方法而导致的额外返工的隐含成本。
Thoughtworker 热爱技术。我们致力于构建技术、研究技术、测试技术、开源技术、书写技术,并不断改进技术。支持卓越软件并掀起IT革命是我们的使命,Thoughtworks 技术雷达就是为了完成这一使命。
作者 | Michael Redlich, Ben Evans, Erik Costlow, Johan Janssen 等
A curated list of awesome Java frameworks, libraries and software.
领取专属 10元无门槛券
手把手带您无忧上云