ヘキサゴナル アーキテクチャは、階層化を使用してコア ロジックを外部オブジェクトから分離する設計スタイルです。そのコア ロジックはビジネス モジュールであり、外部要素はデータベース、外部 API、インターフェイスなどの統合ポイントです。ソフトウェアを内部部分と外部部分に分割し、内部部分にはコアとなるビジネス ロジックとドメイン層 (いわゆる階層型アーキテクチャ) が含まれ、外部部分にはインターフェイス、データベース、メッセージングなどのコンテンツが含まれます。内部と外部は、ポートとアダプターを通じて相互に通信します。
*翻訳注: ヘキサゴナル アーキテクチャは、従来の層状アーキテクチャによって引き起こされる問題を解決するために Alistair Cockburn によって提案されました。 *
1. 利点
ヘキサゴナル アーキテクチャを使用して開発されたソフトウェアはチャネルに依存しないため、複数のチャネルをサポートできます
インバウンドおよびアウトバウンド統合ポイントの簡単な置き換え
統合ポイントを簡単にモックできるため、ソフトウェアのテストが容易になります
2. Java 実装
上で説明したように、ヘキサゴナル アーキテクチャはポートとアダプタを中心に機能します。 Java では、インターフェイスを使用してポートを定義し、実装クラスがアダプターとして機能します。簡単な Spring Boot アプリケーションの例を使用して、ヘキサゴナル アーキテクチャを適用する方法を理解しましょう。
サンプル アプリケーションの主な機能は従業員情報の作成と表示です。コア ビジネス ロジックは EmployeeService に実装されています。ドメイン オブジェクトは Employee として定義されています。これらは内部モジュールとみなすことができます。
**EmployeeService.java**
——java
@サービス
パブリック クラス EmployeeService {
@Autowired
プライベート EmployeeRepositoryPort 従業員リポジトリ;
public void create(文字列名、文字列ロール、長期給与){
employeeRepository.create(名前、役割、給与);
}
パブリック従業員ビュー (整数のユーザー ID){
returnemployeeRepository.getEmployee(userId);
}
}
——
**従業員.java**
——java
@エンティティ
@Table(名前 = "従業員")
パブリック クラス 従業員{
@Id
@GeneratedValue
@Column(name = "id")
プライベート整数 ID;
@Column(name = "name"、nullable = false)
プライベート文字列名;
@Column(名前 = "ロール"、nullable = false)
プライベート文字列ロール;
@Column(名前 = "給与"、nullable = false)
民間の長期給与;
//セッター、ゲッターメソッド
}
これで、サンプル アプリケーションは REST またはメッセージング メカニズムを通じてサービスを提供できるようになりました。 REST サービスを提供するために、EmployeeUIPort インターフェイスを実装する EmployeeControllerAdapter クラスを作成します。
**EmployeeControllerAdapter.java**
——java
レストコントローラー
@RequestMapping("/employees/")
パブリック クラス EmployeeControllerAdapter は EmployeeUIPort{
を実装します @Autowired
プライベート EmployeeService 従業員サービス;
@オーバーライド###### public void create(@RequestBody 従業員リクエスト) {
employeeService.create(request.getName(), request.getRole(), request.getSalary());
}
@オーバーライド###### パブリック従業員ビュー (@PathVariable 整数 ID) {
従業員employee =employeeService.view(id);
従業員を復帰させる;
}
}
——
——java
パブリック インターフェイス EmployeeUIPort {
@PostMapping(「作成」)
public void create(@RequestBody 従業員リクエスト);
@GetMapping("view/{id}")
public Employee view(@PathVariable Integer userId);
}
ビジネス ロジックの一部として、EmployeeService; も外部 DB 統合ポイントを呼び出す必要があります。したがって、このインターフェイスを実装する EmployeeRepositoryPort と EmployeeServiceAdapter を作成しました。
**EmployeeServiceAdapter.java**
——java
@サービス
パブリック クラス EmployeeServiceAdapter は EmployeeRepositoryPort {
を実装します @PersistenceContext
プライベート EntityManager エンティティマネージャー;
@トランザクション
@オーバーライド###### public void create(文字列名、文字列ロール、長期給与) {
従業員 従業員 = 新しい従業員();
従業員.setName(名前);
従業員.setRole(役割);
従業員.setSalary(給与);
entityManager.persist(従業員);
}
@オーバーライド###### public Employee getEmployee(Integer userId) {
returnentityManager.find(Employee.class, userId);
}
}
——
**EmployeeRepositoryPort.java**
——java
パブリック インターフェイス EmployeeRepositoryPort {
void create(文字列名、文字列役割、高額給与);
従業員 getEmployee(整数の userId);
}
以上がJava を使用してヘキサゴナル アーキテクチャを実装するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。