Heim  >  Artikel  >  Java  >  Wie implementiert man eine hexagonale Architektur mit Java?

Wie implementiert man eine hexagonale Architektur mit Java?

WBOY
WBOYnach vorne
2023-04-23 13:25:071359Durchsuche

Sechseckige Architektur ist ein Designstil, der Schichten verwendet, um die Kernlogik von externen Objekten zu isolieren. Seine Kernlogik ist das Geschäftsmodul, und externe Elemente sind Integrationspunkte wie Datenbanken, externe APIs, Schnittstellen usw. Es unterteilt die Software in interne und externe Teile. Der interne Teil enthält die Kerngeschäftslogik und die Domänenschicht (die sogenannte Schichtarchitektur), und der externe Teil enthält Schnittstellen, Datenbanken, Nachrichten und andere Inhalte. Interne und externe Geräte kommunizieren über Ports und Adapter miteinander.

*Übersetzungshinweis: Die sechseckige Architektur wurde von Alistair Cockburn vorgeschlagen, um die Probleme zu lösen, die durch die traditionelle Schichtarchitektur verursacht werden. *

1. Vorteile

Mithilfe einer hexagonalen Architektur entwickelte Software ist unabhängig von Kanälen und kann daher mehrere Kanäle unterstützen

​Einfach zu ersetzende eingehende und ausgehende Integrationspunkte

Das Testen von Software wird einfacher, da Integrationspunkte leicht verspottet werden können

​2. Java-Implementierung

Wie oben beschrieben, funktioniert die hexagonale Architektur eher rund um Ports und Adapter. In Java werden Schnittstellen zum Definieren von Ports verwendet und Implementierungsklassen fungieren als Adapter. Lassen Sie uns anhand eines einfachen Spring Boot-Anwendungsbeispiels verstehen, wie die hexagonale Architektur angewendet wird.

Die Hauptfunktion der Beispielanwendung besteht darin, Mitarbeiterinformationen zu erstellen und anzuzeigen. Die Kerngeschäftslogik ist in EmployeeService definiert. Diese können als interne Module betrachtet werden.

​**EmployeeService.java**

––Java

​@Service

​öffentliche Klasse EmployeeService {

​@Autowired

​private EmployeeRepositoryPort EmployeeRepository;

public void create(String-Name, String-Rolle, langes Gehalt){

EmployeeRepository.create(Name, Rolle, Gehalt);

}

​öffentliche Mitarbeiteransicht (Ganzzahlige Benutzer-ID){

Rückkehr EmployeeRepository.getEmployee(userId);

}

}

––

​**Employee.java**

––Java

​@Entity

​@Table(name = "Mitarbeiter")

​Mitarbeiter der öffentlichen Klasse{

​@Id

​@GeneratedValue

​@Column(name = "id")

private Ganzzahl-ID;

​@Column(name = "name", nullable = false)

privater String-Name;

​@Column(name = "role", nullable = false)

private Streichrolle;

​@Column(name = "Gehalt", nullable = false)

privates Langzeitgehalt;

//Setter-, Getter-Methoden

}

Jetzt kann die Beispielanwendung Dienste über REST- oder Messaging-Mechanismen bereitstellen. Erstellen Sie eine EmployeeControllerAdapter-Klasse, die die EmployeeUIPort-Schnittstelle implementiert, um REST-Dienste bereitzustellen.

​**EmployeeControllerAdapter.java**

––Java

RestController

​@RequestMapping("/employees/")

Die öffentliche Klasse EmployeeControllerAdapter implementiert EmployeeUIPort{

​@Autowired

privat EmployeeService EmployeeService;

​@Override

​public void create(@RequestBody Employee request) {

EmployeeService.create(request.getName(), request.getRole(), request.getSalary());

}

​@Override

​öffentliche Mitarbeiteransicht (@PathVariable Integer id) {

Mitarbeiter Mitarbeiter = EmployeeService.view(id);

Rückkehrmitarbeiter;

}

}

––

––Java

​öffentliche Schnittstelle EmployeeUIPort {

​@PostMapping(„erstellen“)

​public void create(@RequestBody Employee request);

​@GetMapping("view/{id}")

​öffentliche Mitarbeiteransicht(@PathVariable Integer userId);

}

Als Teil der Geschäftslogik muss EmployeeService auch den externen DB-Integrationspunkt aufrufen. Daher haben wir den EmployeeRepositoryPort und den EmployeeServiceAdapter erstellt, die diese Schnittstelle implementieren.

​**EmployeeServiceAdapter.java**

––Java

​@Service

Die öffentliche Klasse EmployeeServiceAdapter implementiert EmployeeRepositoryPort {

​@PersistenceContext

privater EntityManager entityManager;

​@Transactional

​@Override

public void create (String-Name, String-Rolle, langes Gehalt) {

Mitarbeiter Mitarbeiter = neuer Mitarbeiter();

mitarbeiter.setName(name);

Employee.setRole(role);

Employee.setSalary(Gehalt);

​entityManager.persist(mitarbeiter);

}

​@Override

​öffentlicher Mitarbeiter getEmployee(Integer userId) {

​EntityManager.find(Employee.class, userId) zurückgeben;

}

}

  ––

  **EmployeeRepositoryPort.java**

  ––Java

  öffentliche Schnittstelle EmployeeRepositoryPort {

  void create(String-Name, String-Rolle, langes Gehalt);

  Mitarbeiter getEmployee(Integer userId);

  }

Das obige ist der detaillierte Inhalt vonWie implementiert man eine hexagonale Architektur mit Java?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:yisu.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen