Frage

Das Folgende ist eine JPA -kommentierte Typhierarchie, in der alle Datenfelder (und zugehörige Getter und Setter) Mitglieder des SuperType sowie abstrakte Methoden zur Implementierung der Geschäftslogik sind. Es gibt eine beliebige Anzahl von Subtypen, die diese abstrakten Methoden ohne Hinzufügen von Datenmitgliedern implementieren. Daher verwenden wir eine einzelne Tabellenerbschaftsstrategie, damit wir nur eine Tabelle in der Datenbank benötigen, um diese Typhierarchie zu unterstützen.

Ich habe es so gemacht, weil es basierend auf dem Inhalt der Daten verschiedene Verhaltensweisen gibt, die implementiert werden müssen, um ein ultimatives Ziel zu erreichen.

@Entity
@Table
@Inheritance(strategy=InheritanceType.SINGLE_TABLE)
@DiscriminatorColumn
public abstract class SuperEntity {
  // Several fields and getters and setters
  ...
  // Abstract method declarations for business logic
  ...
}

@Entity
@DiscriminatorValue("some value")
public class SomeSubtype extends SuperEntity {
  // Implementations of abstract methods
  ...
}

Ist dies eine Perversion des Spaltenkonzepts des Diskriminators in JPA/Hibernate?

Ein Mitarbeiter argumentiert, dass die abstrakten Methoden und entsprechenden Implementierungen in einen Strategiemusteransatz verschoben werden sollten, da die Struktur der Daten nicht von Untertyp zu Sub-Typ variiert. Ist seine Vorstellung besser?

War es hilfreich?

Lösung

Besser ist extrem subjektiv. Es klingt nach Komposition und Strategien sind eine gültige Alternative, die Sie daran hindern, eine andere Einheit für jede Implementierung der Geschäftslogik zuzuordnen.

Abgesehen von JPA und Hibernate beginnt jedes OO -Designbuch, das ich je gelesen habe, mit "Favor -Komposition über Erbschaft" für das Austauschverhalten.

Wenn Sie angenommen haben, dass Sie ein Datenobjekt hatten, können Sie das Objekt nicht zwischen jeder Nicht-Hibernate-Strategie teilen und damit arbeiten? Weniger JPA/Hibernate ist auf jeden Fall einfacher für die Augen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top