Java的六边形架构

六边形体系结构是一种风格,它以一种将核心逻辑与外部元素隔离开来的方式分层对象。核心逻辑是特定于您的业务的部分,外部元素就像集成点,例如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集成。

摘要

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

猜你喜欢

转载自blog.csdn.net/Tybyqi/article/details/85787679