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