Best-Practice - Multi-Schicht-Architektur und DTOs

Nach der Lektüre einige der Q/Als hier auf stackoverflow, ich bin immer noch verwirrt über die korrekte Umsetzung der DTOs in meiner web-Anwendung. Meine aktuelle Umsetzung ist ein (Java EE basiert) multi-tier-Architektur (mit Ausdauer -, service-und Präsentation-layer), aber mit einer "common" - Paket durch alle Schichten, mit (unter anderem) domain-objecs. In diesem Fall sind die Ebenen kann man wirklich nicht als unabhängig betrachtet werden.
Ich bin Planung, um die zu entfernen common-Paket Schritt für Schritt, aber ich begegne verschiedenen Herausforderungen/Fragen:

  • Übernehmen die Persistenz-Schicht würde eine Klasse verwenden myproject.die Persistenz.domain.UserEntity (eine JPA-basierte Einheit) zum speichern und laden von Daten in/aus der Datenbank. Um Daten anzuzeigen, die in der Sicht würde ich eine andere Klasse myproject.service.domain.Benutzer. Wo muss ich Sie konvertieren? Würde der service für die Nutzer sind verantwortlich für die Konvertierung zwischen den beiden Klassen? Würde das wirklich helfen zu verbessern die Kupplung?
  • Wie sollte die Benutzer Klasse Aussehen? Sollte es enthalten nur Getter zu werden, unveränderlich sind? Wäre es nicht umständlich für die Ansichten zum Bearbeiten von existierenden Benutzern (erstellen Sie eine neue Benutzer, verwenden Sie die get-der bestehenden Benutzer Objekt etc.)?
  • Sollte ich das gleiche DTO-Klassen (Benutzer) senden Sie eine Anfrage an den service zu ändern Sie einen vorhandenen Benutzer/einen neuen Benutzer erstellen oder sollte ich umsetzen, andere Klassen?
  • Wäre das nicht der Präsentations-Schicht sehr abhängig von der service-Schicht, mit der alle DTOs in myproject.service.domain?
  • Zu behandeln, wie meine eigenen Ausnahmen? Mein Aktueller Ansatz rethrows die meisten "schweren" Ausnahmen, bis Sie behandelt werden, von der Präsentations-Schicht (in der Regel sind Sie angemeldet, und der Benutzer wird darüber informiert, dass etwas schiefgelaufen ist). Auf der einen Seite habe ich das problem, dass ich hava wieder ein gemeinsames Paket. Auf der anderen Seite bin ich noch nicht sicher, dass diese können als "best practice". Irgendwelche Ideen?

Danke für alle Antworten.

  • Ich werde die Abstimmung zu schließen, ist diese Frage off-topic, denn es ist eine Architektur und keine Programmierung questin.
InformationsquelleAutor user3575404 | 2014-04-26
Schreibe einen Kommentar