Sechseckige Architektur mit FrühlingsdatenJava

Java-Forum
Anonymous
 Sechseckige Architektur mit Frühlingsdaten

Post by Anonymous »

Ich werde ein neues Projekt starten, um Spring Boot, Spring Data und die hexagonale Architektur zu lernen. Nach meinem Verständnis zielt die hexagonale Architektur darauf ab, die Kern- oder Domänenschicht von den Datenbankoperationen (Infrastrukturschicht) zu trennen. Ich habe die folgende Projektstruktur für diese Architektur gesehen.

Die Kernschicht hat:

Dienste-> Wo Die Logik lautet (Schnittstellen und ihre Implementierungen).

Entitäten -> Diese werden in der gesamten Anwendung verwendet.

Repository-> Schnittstellen, die die Infrastrukturschicht implementieren muss.

Die Infrastruktur Layer verfügt über die Implementierung der Repository-Schnittstellen, der JPA-Entitäten, Aufrufe an die Datenbank (Ruhezustand) und einige Funktionen zur Umwandlung der JPA-Entitäten in Kernentitäten (Mapper?).

Spring Data bietet eine sehr nützliche Möglichkeit, CRUD-Operationen zu implementieren:

Code: Select all

public interface UserRepository extends JpaRepository {
}
Wenn ich jedoch Spring-Daten verwende, sind die JPA-Entitäten meiner Meinung nach nicht Teil der Infrastrukturschicht, wenn UserRepository Teil der Kernschicht ist. Das bedeutet, dass die Core-Entitäten nutzlos wären. Soll ich eine weitere UserRepository-Schnittstelle erstellen, die zur Kernschicht gehört, oder fehlt mir etwas?

UPDATE:

Meine Bedenken bei der Verwendung von Spring-Daten rühren daher, dass ich die JPA-Entitäten in die Domäne einbinden muss, was theoretisch gegen die hexagonale Architektur verstoßen würde.

Also habe ich darüber nachgedacht, die Domänenentitäten von den JPA-Entitäten zu trennen. Aber wenn ich das mache, weiß ich nicht, wohin das Repository von Spring Data gehen soll, und finde auch keinen Weg, die JPA-Entitäten in Domänenentitäten umzuwandeln.

Um es etwas besser zu veranschaulichen, gehe ich davon aus, dass ich von meiner Anwendung aus eine Verbindung zu einer Datenbank herstellen muss, um eine Benutzertabelle zu lesen.

Dies könnte die Domain-Entität sein:

Code: Select all

public class UserDomain{
private String name;
....//More fields, getters, and setters.
< /code>

Ab meinem Verständnis sollten die Dienste die Logik enthalten und die Domäneneinheiten betreibt. < /p>

public interface UserService{
public void create(UserDomain user);
...
< /code>

Die Implementierung: < /p>

public class UserServiceImpl implements UserService{
public void create(UserDomain user) {
... //Calling the repository(Spring Data Repository?)
Das Obige ist zusammen mit der Repository-Schnittstelle das, was ich als Domäne betrachte (Wenn ich falsch liege, korrigieren Sie mich bitte). Als nächstes wird die Infrastruktur aus den JPA-Einheiten zusammengesetzt

@Entity
@Table(name="users")
public class User{
@Column(name="name")
private String name;
... // More Fields, getters, and setters
< /code>

Ich denke, die Schnittstelle, in der ich Springdaten aufrufe Noch eine Klasse (und Adapter?), Um diese Zuordnung zu machen. Ist dieser Ansatz korrekt oder gibt es einen anderen Weg? Entschuldigung für den langen Beitrag, ich hoffe ich habe mich klar gemacht.

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post