Ich bin derzeit in einem Dilemma und habe diesbezüglich gelesen.
Ich mache meine DTOs auch zu meinen Entitäten. Es sieht ungefähr so aus:
@Entity
@PasswordMatches // custom validator
public class User {
@Id
@Column
@GeneratedValue(strategy=GenerationType.IDENTITY)
private Long id;
@Column
@NotNullOrEmpty // custom validator
private String password;
@Transient
@NotNullOrEmpty // custom validator
private String confirmPassword;
Frage 1 : Ist das akzeptabel oder gibt es einen besseren Weg, dies zu tun? Denn derzeit, bevor User
ich ein speichere, habe ich das Passwort aus offensichtlichen Gründen gehasht, aber wenn ich es em.persist(user)
direkt tue, wird es fehlschlagen, weil @PasswordMatches
es fehlschlägt. Es spart nur, wenn ich es user.setConfirmPassword(hashedPassword)
nur tue , um die Validierung zu erfüllen. Mache ich hier das Richtige?
Während EJB3 die Möglichkeit der Verwendung von Entitäten als DTOs zuließ, ist es in Wahrheit immer noch besser, separate DTOs zu haben.
Ziemlich bald werden Sie feststellen, dass Ihre Entitäten Anmerkungen zu bestimmten JPA-Anbietern (wie dem Ruhezustand) benötigen, die Ihre Entitäten an die Persistenzschicht binden. Dies bedeutet, dass, wenn Ihre Entitäten an Ihre Präsentationsschicht weitergegeben werden, diese Schicht über die spezifischen Bibliotheken / Frameworks Bescheid wissen muss, die Sie in Ihrer Persistenzschicht verwenden. Das ist kein großes Problem, wenn Sie Web-Sachen machen, aber wenn Sie reiche Kunden machen (z. B. Swing), kann dies zusätzliches Gepäck sein, das Ihre Kunden mit sich herumtragen müssen.
In ähnlicher Weise möchten Sie Ihre Entitäten für die Präsentationsebene mit @Json
Anmerkungen versehen (z . B. mithilfe von Anmerkungen). Wenn Sie diese in Ihre Entitäten einfügen, wird Ihre Persistenzschicht wieder mit Ihrer Präsentationsebene verknüpft.
Anfangs sind wir in die Falle geraten, unsere Entitäten zu verwenden, um Daten an unsere reichen Kunden weiterzugeben, aber wir hatten über 300 Entitätsklassen erstellt, als wir erkannten, dass wir sie in DTOs und Persistenzentitäten unterteilen mussten. Es war eine schmerzhafte Erfahrung, dies mit so vielen Entitäten zu tun, aber jetzt (mit über 400 Entitätsklassen) sind wir froh, dass wir es getan haben.
So, während es ist akzeptabel zu tun , was Sie tun, haben Sie bereits in ein Problem laufen , wo Business - Logik mit Ihrer Persistenz - Schicht Mischen hat ein Problem verursacht. Ich würde empfehlen, diese in DTOs und Entitäten aufzuteilen, um Ihnen auch in Zukunft Probleme zu ersparen.
Dieser Artikel stammt aus dem Internet. Bitte geben Sie beim Nachdruck die Quelle an.
Bei Verstößen wenden Sie sich bitte [email protected] Löschen.
Lass mich ein paar Worte sagen