今天小編給大家分享一下Java怎么實現(xiàn)六邊形架構(gòu)的相關(guān)知識點,內(nèi)容詳細,邏輯清晰,相信大部分人都還太了解這方面的知識,所以分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后有所收獲,下面我們一起來了解一下吧。
創(chuàng)新互聯(lián)從2013年創(chuàng)立,是專業(yè)互聯(lián)網(wǎng)技術(shù)服務(wù)公司,擁有項目成都做網(wǎng)站、網(wǎng)站建設(shè)網(wǎng)站策劃,項目實施與項目整合能力。我們以讓每一個夢想脫穎而出為使命,1280元淅川做網(wǎng)站,已為上家服務(wù),為淅川各地企業(yè)和個人服務(wù),聯(lián)系電話:18982081108
六邊形架構(gòu)是一種設(shè)計風(fēng)格,通過分層實現(xiàn)核心邏輯與外部對象隔離。其核心邏輯是業(yè)務(wù)模塊,外部元素是整合點,比如數(shù)據(jù)庫、外部 API、界面等。它將軟件分為內(nèi)部與外部,內(nèi)部包含了核心業(yè)務(wù)邏輯與領(lǐng)域?qū)樱ㄋ^分層架構(gòu)),外部包含界面、數(shù)據(jù)庫、消息傳遞及其他內(nèi)容。內(nèi)部與外部通過端口和適配器相互通信。
*譯注:六邊形架構(gòu)(Hexagonal Architecture)由Alistair Cockburn 提出,解決了傳統(tǒng)的分層架構(gòu)所帶來的問題。*
1. 優(yōu)點
使用六邊形架構(gòu)開發(fā)的軟件與通道獨立,因此能支持多通道
易于置換入站和出站整合點
測試軟件變得更簡單,因為可以很容易地模擬集成點
2. Java 實現(xiàn)
按照上面的描述,六邊形架構(gòu)更多地是圍繞端口和適配器開展工作。在 Java 中,用 interface 定義端口,實現(xiàn)類作為適配器。下面用一個簡單的 Spring Boot 應(yīng)用示例了解如何應(yīng)用六邊形架構(gòu)。
示例應(yīng)用主要功能是創(chuàng)建并查看雇員信息,核心業(yè)務(wù)邏輯在EmployeeService中實現(xiàn),領(lǐng)域?qū)ο蠖x為Employee這些都可以看做內(nèi)部模塊。
**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 方法
}
現(xiàn)在,示例應(yīng)用可以通過 REST 或消息機制提供服務(wù)。創(chuàng)建實現(xiàn)了EmployeeUIPort接口的EmployeeControllerAdapter類提供 REST 服務(wù)。
**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);
}
作為業(yè)務(wù)邏輯的一部分,EmployeeService; 還需要調(diào)用外部 DB 集成點。因此,我們創(chuàng)建了EmployeeRepositoryPort以及實現(xiàn)了該接口的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);
}
以上就是“Java怎么實現(xiàn)六邊形架構(gòu)”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家閱讀完這篇文章都有很大的收獲,小編每天都會為大家更新不同的知識,如果還想學(xué)習(xí)更多的知識,請關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道。