anyuan2002.com - vwin网

查找: 您的方位主页 > 网络频道 > 阅览资讯:六边形架构 Java 完成
vwin娱乐场

六边形架构 Java 完成

2019-04-07 08:18:52 来历:www.anyuan2002.com 【

六边形架构是一种规划风格,经过分层完成中心逻辑与外部目标阻隔。其中心逻辑是事务模块,外部元素是整合点,比方数据库、外部 API、界面等。它将软件分为内部与外部,内部包括了中心事务逻辑与范畴层(所谓分层架构),外部包括界面、数据库、音讯传递及其他内容。内部与外部经过端口和适配器彼此通讯。

*译注:六边形架构(Hexagonal Architecture)由Alistair Cockburn 提出,处理了传统的分层架构所带来的问题。*

1. 长处

  • 运用六边形架构开发的软件与通道独立,因而能支撑多通道
  • 易于置换入站和出站整合点
  • 测验软件变得更简略,由于能够很容易地模仿集成点

 

2. Java 完成

依照上面的描绘,六边形架构更多地是环绕端口和适配器开展作业。在 Java 中,用 interface 界说端口,完成类作为适配器。下面用一个简略的 Spring Boot 运用示例了解怎样运用六边形架构。

示例运用主要功能是创立并检查雇员信息,中心事务逻辑在 `EmployeeService` 中完成,范畴目标界说为 `Employee` ,这些都能够看做内部模块。

**EmployeeService.java**
```java
@Service
public class EmployeeService {
  @Autowired
  private EmployeeRepositoryPort employeeRepository;
  public void create(String name, String role, long salary){
    employeeRepository.create(name, role, salary);
  }
  
  public Employee view(Integer userId){
    return employeeRepository.getEmployee(userId);
  }
}
```

 

**Employee.java**
```java
@Entity
@Table(name = "employee")
public class Employee{
  @Id
  @GeneratedValue
  @Column(name = "id")
  private Integer id;
  @Column(name = "name", nullable = false)
  private String name;
  @Column(name = "role", nullable = false)
  private String role;
  @Column(name = "salary", nullable = false)
  private long salary;
  // Setter、Getter 办法
}
```

 

现在,示例运用能够经过 REST 或音讯机制供给服务。创立完成了 `EmployeeUIPort` 接口的`EmployeeControllerAdapter` 类供给 REST 服务。

**EmployeeControllerAdapter.java**
```java
RestController
@RequestMapping("/employees/")
public class EmployeeControllerAdapter implements EmployeeUIPort{
  @Autowired
  private EmployeeService employeeService;
  @Override
  public void create(@RequestBody Employee request) {
    employeeService.create(request.getName(), request.getRole(), request.getSalary());
  }
  @Override
  public Employee view(@PathVariable Integer id) {
    Employee employee = employeeService.view(id);
    return employee;
  }
}
```

 

```java
public interface EmployeeUIPort {
  @PostMapping("create")
  public void create(@RequestBody Employee request);
  @GetMapping("view/{id}")
  public Employee view(@PathVariable Integer userId);
}
```

 

作为事务逻辑的一部分,`EmployeeService` 还需要调用外部 DB 集成点。因而,咱们创立了`EmployeeRepositoryPort` 以及完成了该接口的 `EmployeeServiceAdapter`。

**EmployeeServiceAdapter.java**
```java
@Service
public class EmployeeServiceAdapter implements EmployeeRepositoryPort {
  @PersistenceContext
  private EntityManager entityManager;
  @Transactional
  @Override
  public void create(String name, String role, long salary) {
    Employee employee = new Employee();
    employee.setName(name);
    employee.setRole(role);
    employee.setSalary(salary);
    entityManager.persist(employee);
  }
  @Override
  public Employee getEmployee(Integer userId) {
    return entityManager.find(Employee.class, userId);
  }
}
```

 

**EmployeeRepositoryPort.java**
```java
public interface EmployeeRepositoryPort {
  void create(String name, String role, long salary);
  Employee getEmployee(Integer userId);
}
```

 

至此,咱们能够看到 `EmployeeService` 是怎样运用 `EmployeeUIPort` 端口供给服务,经过 `EmployeeRepositoryPort` 调用 DB 并经过 `EmployeeControllerAdapter`和`EmployeeServiceAdapter` 供给 REST API 服务。

3. 总结

总结一下,六边形架构是一种将运用划分红表里两部分的规划办法。经过内部揭露的端口与外部完成的适配器进行交流。运用这种办法,在坚持中心用例代码不变的情况下,能够服务多个通道、支撑多种不同协议。 不仅如此,它还能有用进步运用程序的可测性。尽管如此,不主张在整个运用中彻底完成六边形架构,而是有挑选地运用接口与适配器。

欢迎作业一到五年的Java工程师朋友们参加Java程序员开发: 721575865

群内供给免费的Java架构学习材料(里边有高可用、高并发、高功能及分布式、Jvm功能调优、Spring源码,MyBatis,Netty,Redis,Kafka,Mysql,Zookeeper,Tomcat,Docker,Dubbo,Nginx等多个知识点的架构材料)合理使用自己每一分每一秒的时刻来学习提高自己,不要再用"没有时刻“来粉饰自己思想上的懒散!趁年青,用力拼,给未来的自己一个告知!

 
 

本文地址:http://www.anyuan2002.com/a/question/100302.html
Tags: 架构 Java 六边形
修改:vwin网
  • 上一篇:Hadoop原理及架构
  • 下一篇:mariadb集群架构
  • 关于咱们 | 联络咱们 | 友情链接 | 网站地图 | Sitemap | App | 回来顶部