Java 六边形架构 – BABAL

本文介绍了使用六边形架构(Ports & Adapters)实现Java CMS应用的教程,强调了保持业务逻辑分离和依赖反转原则。通过定义端口、适配器和用例,实现了领域模型与外部层的解耦,便于代码维护和扩展。示例中展示了项目结构、领域模型、端口接口、用例实现、适配器以及应用入口点,最后讨论了六边形架构的优点。
摘要由CSDN通过智能技术生成

一、概述

在本教程中,我们将使用 Hexagonal Architecture 的原理,使用 CLI 使用者实现一个简单的 Java CMS 应用程序。主要思想是尽可能保持业务逻辑分离,并使用SOLID原则中的“ D”依赖反转原则来防止层之间的耦合。

2. 什么是六边形架构

它是一种围绕业务逻辑设计软件应用程序架构并将其与其他层解耦的方法。解耦是通过使用端口和适配器来处理的,这就是为什么 Hexagonal Architecture六边形架构 也被称为Ports & Adapters的原因。

您可以看到由 Hexagonal 架构分层的典型应用程序的几个关键特征;

  • 您可以定义端口来说明您可以对特定域对象做什么,这些端口应该是接口
  • 有两种类型的端口;入站(或驱动) 端口和出站(或驱动)端口
  • 适配器是端口的不同实现
  • 有 2 种类型的适配器;入站(或驱动) 适配器和出站(或驱动)适配器
  • 领域对象从不依赖于外部层。

3. 组织项目结构

该项目包含 2 个根包:

  • domain 用于域对象、端口和用例,以说明域对象的契约和行为
  • 基础设施主要包含输入和输出端口的适配器实现

对于每个域对象,在我们的例子中,我们有一个包来将端口和用例保存在域包中。在基础设施包中,我们为每个域对象提供了适配器包。

4.领域模型

我们的领域模型,Article 是用来说明文章信息的,相关实现如下;

<pre class="prettyprint hljs vbscript" style="padding: 0.5em; font-family: Menlo, Monaco, Consolas, &quot;Courier New&quot;, monospace; color: rgb(68, 68, 68); border-radius: 4px; display: block; margin: 0px 0px 1.5em; font-size: 14px; line-height: 1.5em; word-break: break-all; overflow-wrap: break-word; white-space: pre; background-color: rgb(246, 246, 246); border: none; overflow-x: auto;"><b>public</b> record Article(
    Long id,
    Long accountId,
    String title,
    String body
) {}

这是一个简单的 Java POJO 类来声明文章信息,让我们看看如何在 Port 接口中编写合约

5. 端口

如果你想定义一个包含创建、检索和查询行为的端口,下面的接口将是一个不错的选择;

<pre class="prettyprint hljs xml" style="padding: 0.5em; font-family: Menlo, Monaco, Consolas, &quot;Courier New&quot;, monospace; color: rgb(68, 68, 68); border-radius: 4px; display: block; margin: 0px 0px 1.5em; font-size: 14px; line-height: 1.5em; word-break: break-all; overflow-wrap: break-word; white-space: pre; background-color: rgb(246, 246, 246); border: none; overflow-x: auto;"><b>public</b> <b>interface</b> ArticlePort {
    Arti
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值