Ist es normal/empfohlen, Schnittstellen für die Entitäten in einer Anwendung zu erstellen? Wenn dies der Fall ist, sollten Getter/Setter in der Schnittstelle oder nur Geschäftsmethoden deklariert werden?Sollte ich Schnittstellen für meine Entitäten machen?
Antwort
Schnittstelle sind für Business-Logik, es ist das Verhalten oder die Funktionalität Ihres Moduls zu deklarieren. POJOs sind nur Objekte, die Daten enthalten und keine Logik zu tun haben - also nicht.
Sie können Schnittstellen erstellen, wenn es sinnvoll ist: Gibt es mehrere Klassen mit derselben Funktionalität (d. H. Werden sie die gleiche Schnittstelle verfügbar machen)? In diesem Fall können Sie eine Schnittstelle mit diesen (Geschäftslogik-) Methoden erstellen.
Auch eine Schnittstelle enthält keine Variablen, um einen Status zu verfolgen, diese sind Teil der Klasse, die die Schnittstelle implementiert. Mehrere Klassen mit derselben Schnittstelle können es auf andere Weise implementieren, so dass keine Variablen (und somit Getter und Setter) in der Schnittstelle angegeben werden müssen.
Schnittstelle sollte definitiv keine Getter und Setter enthalten. Interface stellt nur Funktionen bereit, die Ihre Klasse ausführen kann (wenn Sie Getter/Setter benötigen - verwenden Sie abstrakte Klassen). Felder normalerweise (nicht immer, natürlich) nur ein Teil der Implementierung.
Also, wenn Sie Ihre Klasse nur Daten enthält, gibt es keine Notwendigkeit, in Schnittstellen
Man könnte argumentieren, dass eine Schnittstelle für eine Entität unter Verwendung von Clients verwendet werden kann aus der Tatsache zu entkoppeln, dass sie mit JPA handeln. Ich habe manchmal die Situation, dass ich mehrere abgeleitete nicht persistente Business-Objekte neben persistenten Entitäten, die beide die gleiche Schnittstelle teilen. In solchen Fällen finde ich das angemessen. Sie sollten solche Anwendungen jedoch auf Fälle beschränken, in denen Sie nur Transaktionen lesen müssen, wenn Sie Transaktionen nicht beachten müssen.
Bitte werfen Sie einen Blick auf diesen ausgezeichneten Artikel, der über die "Übernutzung" des Interface/Implementierungsmusters diskutiert. Normalerweise Entity Beans werden folgende nicht diese Art von Muster und Sie werden hier einen guten Grund finden:
http://marekdec.wordpress.com/2011/12/06/explicit-interface-per-class-antipattern/
Nun, ich glaube nicht, dass Unternehmen/pojo als Schnittstelle macht keinen Sinn, weil Unternehmen oder pojo hat Eigenschaften mit Getter und Setter Und für Daten verwendet. Angenommen, Sie stellen die Schnittstelle und ihre Implementierung bereit (in POJO, die die Schnittstelle implementiert), und Sie behalten sie in der Datenbank bei, indem Sie die Schnittstellenreferenz zur Implementierungsklasse verwenden. Es ist in Ordnung, dass es beibehalten wird, aber was ist, wenn Sie einen anderen Pojo bereitstellen, der dieselbe Schnittstelle implementiert. Es wird definitiv die Bedeutung von Pojo verletzen und natürlich ist es verwirrend, welche pojo bestehen bleiben.
- 1. Java/Hibernate mit Schnittstellen über die Entitäten
- 2. Wie interne Schnittstellen für Moq sichtbar machen?
- 3. Wo sollte ich die Schnittstellen für MEF setzen?
- 4. kann nicht UUID id für meine Entitäten
- 5. Wie separiere ich meine Entitäten vom Datenbankmodell?
- 6. Welche Art von Schemacode sollte ich für meine Site verwenden?
- 7. Sollte ich meine DLLs signieren?
- 8. Namenskonventionen für extrahierte Schnittstellen
- 9. Welchen DNS-Typ sollte ich verwenden, um meine REST-Dienste über meine Domain verfügbar zu machen?
- 10. Wie sollte ich potenzielle Bedrohungen für meine Website überwachen?
- 11. Interne Schnittstellen - meine Unwissenheit aussetzt
- 12. Wo sollte ich meine DbCommand-Instanzen erstellen?
- 13. Ich möchte meine eigene Visualisierungskomponente machen, welche sollte ich erweitern? UIComponent oder Sprite?
- 14. Sollte ich für meine GUI-App "ganz" Async verwenden?
- 15. Wo sollte ich temporäre Dateien für meine Anwendung generieren?
- 16. Was sollte ich für meine Poolgröße in database.yml berücksichtigen?
- 17. Wo sollte ich meine Protokolldatei für eine asp.net-Anwendung ablegen?
- 18. Welches Woocommerce Plugin sollte ich für meine Bedürfnisse verwenden?
- 19. Welche SRID sollte ich für meine Anwendung verwenden und wie?
- 20. Welchen azure Service sollte ich für meine node.js App wählen?
- 21. Sollte ich Konstruktornamen für meine Klassen groß schreiben?
- 22. Sollte ich geschützten Konstruktor für meine Singleton-Klassen erstellen?
- 23. Wie würde ich eine bedingte Aussage für meine mediaPickers machen?
- 24. Wie kann ich meine MySQL-Datensätze für Suchmaschinen sichtbar machen?
- 25. Sollte ich equals() Methoden in JPA-Entitäten schreiben?
- 26. Sollte ich Entitäten verwenden, wenn Datenzugriff tatsächlich benötigt wird?
- 27. jSoup entblößt meine HTML-Entitäten nicht richtig
- 28. Ich möchte meine TXT-Datei sicher machen
- 29. Schnittstellen für Abhängigkeitsinjektion und -protokollierung
- 30. Optionale Parameter für Schnittstellen
Das OO-Paradigma sagt uns, dass wir die Daten und ihre Funktionalität in eine Klasse einordnen sollten. Dies zu spalten kann aus technischen Gründen nützlich sein, verletzt jedoch OO. – BetaRide
Wenn wir über PlainOldJavaObject sprechen, sprechen wir über Objekte, die nur Daten (Eigenschaften) ohne Logik-Getter und Setter enthalten. Sie haben Recht mit Objekten mit Funktionalität (die wahrscheinlich Daten enthält) - und es sollte nicht aufgeteilt werden. – shem
> Das OO-Paradigma sagt uns, dass wir die Daten und ihre Funktionalität in eine Klasse einordnen sollten. - Backt ein Kuchen selbst? Ist 'cake.bake()' sinnvoll? –