首页 > 编程语言 >Java的六边形架构

Java的六边形架构

时间:2023-06-15 12:37:34浏览次数:42  
标签:架构 name 应用程序 员工 Employee Java 六边形 public String


六边形体系结构是一种风格,它以一种将核心逻辑与外部元素隔离开来的方式分层对象。核心逻辑是特定于您的业务的部分,外部元素就像集成点,例如DB,外部API,UI等。它将软件划分  为内部外部部分。 内部  部件包含核心业务逻辑和域层(在LayeredArchitecture中解释)。该部分包括用户界面,数据库,消息传递和其他的东西的。内部和外部部件都通过端口和适配器相互通信。

优点

  • 使用此架构开发的软件独立于通道,可支持多个通道
  • 易于更换入站和出站集成点
  • 测试软件变得简单,因为我们可以轻松地模拟集成点

用Java实现

如上所述,六边形体系结构更多地围绕端口和适配器。在Java中,接口实现端口,实现类 用作适配器 因此,我们将看一个使用Spring Boot应用程序的简单示例,并了解如何将此样式应用于此应用程序。

在此应用程序中,我们具有创建/查看员工详细信息的功能。核心业务逻辑位于  EmployeeService 和域中  Employee。 因此,这些将被视为内部部件

@服务
公共 类 EmployeeService {
 
    @Autowired
    private  EmployeeRepositoryPort  employeeRepository ;
 
    public  void  create(String  name,String  role,long  salary){
        employeeRepository。创造(名称,角色,工资);
    }
 
    public  Employee  视图(Integer  userId){
        return  employeeRepository。getEmployee(userId);
    }
}
@实体
@Table(name  =  “employee”)
公共 类 员工 {
    @ID
    @GeneratedValue
    @Column(name  =  “id”)
    private  Integer  id ;
 
    @Column(name  =  “name”,nullable  =  false)
    私有 字符串 名称 ;
 
    @Column(name  =  “role”,nullable  =  false)
    私有 String  角色 ;
 
    @Column(name  =  “salary”,nullable  =  false)
    私人 长 薪 ;
    // Setter和Getter方法
}


所以现在,这个应用程序可以通过REST或Messaging公开这个功能。因此,我们创建了  EmployeeControllerAdapter 公开REST端点,实现了  EmployeeUIPort

@RestController
@RequestMapping(“/ employees /”)
公共 类 EmployeeControllerAdapter  实现 EmployeeUIPort {
 
    @Autowired
    private  EmployeeService  employeeService ;
 
   @覆盖
    public  void  create(@RequestBody  Employee  request){
        employeeService。创建(请求。的getName(),请求。getRole(),请求。的getSalary());
    }
 
    @覆盖
    public  Employee  view(@PathVariable  Integer  id){
        员工 employee  =  employeeService。view(id);
        回报 员工 ;
    }
}
 公共 接口 EmployeeUIPort {
 @PostMapping(“创建”)
    public  void  create(@RequestBody  Employee  request);
 
    @GetMapping(“view / {id}”)
    public  Employee  view(@PathVariable  Integer  userId);
 }


 

作为业务逻辑的一部分,  EmployeeService 还需要调用DB,这又是一个集成点(外部部分),因此我们创建  EmployeeRepositoryPort, 并EmployeeServiceAdapter实现了这个端口。

公共 类 EmployeeServiceAdapter  实现 EmployeeRepositoryPort {
 
    @PersistenceContext
    private  EntityManager  entityManager ;
 
    @Transactional
    @覆盖
    public  void  create(String  name,String  role,long  salary){
        员工 员工 =  新 员工();
        员工。setName(name);
        员工。setRole(role);
        员工。setSalary(薪水);
        entityManager。坚持(员工);
    }
 
    @覆盖
    public  Employee  getEmployee(Integer  userId){
        返回 entityManager。发现(员工,一流的,用户id);
    }
}
公共 接口 EmployeeRepositoryPort {
 
    void  create(String  name,String  role,long  salary);
 
    员工 getEmployee(Integer  userId);
}
————————————————

 

因此,我们看到如何  EmployeeService 使用EmployeeUIPort端口来公开其服务并   EmployeeRepositoryPort 与数据库进行交互。此外,   EmployeeControllerAdapter 还  EmployeeServiceAdapter 有助于与REST API和DB集成。

摘要

总而言之,六边形体系结构是一种用于将应用程序划分为  内部外部部分的方法。它们通过端口(由内部暴露)和适配器(由外部实现)连接。因此,通过应用此方法,核心用例代码保持不变,可以服务于多个通道,支持不同的协议。它还有助于轻松测试应用程序。但是,我建议不要为整个应用程序完全实现此架构,而是有选择地使用接口和适配器。

标签:架构,name,应用程序,员工,Employee,Java,六边形,public,String
From: https://blog.51cto.com/u_16145034/6486203

相关文章

  • Java低代码开发工具:jvs-rules 2.1.8 新版本功能清单
    规则引擎用于管理和执行业务规则。它提供了一个中央化的机制来定义、管理和执行业务规则,以便根据特定条件自动化决策和行为。规则引擎的核心概念是规则。规则由条件和动作组成。条件定义了规则适用的特定情况或规则触发的条件,而动作定义了规则满足时要执行的操作或行为。jvs-rules......
  • javaScript 对象与数组参考
    javaScript对象与数组参考本文列举了各种JavaScript对象与数组,同时包括对上述每一对象或数组所完成工作的简短描述,以及与其相关的属性方法,以及事件处理程序,还注明了该对象或数组的父对象用户同样可能需要参考OnlineCompanion中的超级文本ObjectHierarchy页面(http://ww......
  • Apache Beam和BigQuery的错误处理(Java SDK)
    设计管道假设我们有一个简单的场景:事件正在流向Kafka,我们希望使用管道中的事件,进行一些转换并将结果写入BigQuery表,以使数据可用于分析。可以在作业开始之前创建BigQuery表,或者Beam本身可以创建它。代码看起来很简单:EventsProcessingOptionsoptions=PipelineOptionsFactory......
  • Java 多线程同步问题的探究(二、给我一把锁,我能创造一个规矩)
    在上一篇中,我们讲到了多线程是如何处理共享资源的,以及保证他们对资源进行互斥访问所依赖的重要机制:对象锁。本篇中,我们来看一看传统的同步实现方式以及这背后的原理。很多人都知道,在Java多线程编程中,有一个重要的关键字,synchronized。但是很多人看到这个东西会感到困惑:“都说同......
  • Java中的WeakHashMap与类示例
    在本文中,我们将WeakHashMap 通过示例从java.util包中学习  类。我们将学到什么?WeakHashMap 课程概述WeakHashMap 类构造方法摘要WeakHashMap 类构造方法WeakHashMap 类示例1.WeakHashMap类概述WeakHashMap 是一个基于Hash表的Map接口实现的弱键。当其密钥不再正常使用......
  • Java正则表达式详解
    如果你曾经用过Perl或任何其他内建正则表达式支持的语言,你一定知道用正则表达式处理文本和匹配模式是多么简单。如果你不熟悉这个术语,那么“正则表达式”(RegularExpression)就是一个字符构成的串,它定义了一个用来搜索匹配字符串的模式。许多语言,包括Perl、PHP、Python、JavaScript......
  • JavaScript内存限制
    JavaScriptmemorylimitJavaScript应用程序可以存储的最大数据量是多少?我猜这是由浏览器处理的,每个浏览器都有其局限性吗?如果没有限制,将创建页面文件吗?如果是这样,那不安全吗? 相关讨论  有一些限制,尽管这些取决于浏览器。例如,Firefox对堆栈空间以及过多的CPU消......
  • Java_Dom4j_解析xml
    via:http://blog.163.com/kewangwu@126/blog/static/8672847120126261033594/ 1、DOM4J简介DOM4J是dom4j.org出品的一个开源XML解析包。DOM4J应用于Java平台,采用了Java集合框架并完全支持DOM,SAX和JAXP。Dom:把整个文档作为一个对象。DOM4J最大的特色是使用大量的接口......
  • ajax + java 实现类似网易邮箱邮件地址自动完成功能
    ajax+java实现类似网易邮箱邮件地址自动完成功能2008-04-0218:30********************************************************************源代码下载链接:http://www.javaeye.com/topic/150778***************************************************************......
  • 您必须知道的重要Java关键字
    什么是Java中的关键字?Java关键字是一个保留字,具有与之关联的特殊含义。为便于识别,它们通常以Java格式突出显示。在50个关键字中,有48个正在使用,而有两个不在。让我们更详细地研究一些重要的Java关键字。重要的Java关键字列表摘要: 它用于完成 抽象。它是一种与类和方法相关的非访......