2017-07-29 1 views
2

In meiner Java-Spring-Anwendung habe ich eine DAO-Klasse mit Methoden. Ich würde gerne wissen, welche Zugriffsmodifizierer verwenden: protected oder public?Spring DAO Klassenmethode - geschützt vs Öffentlichkeit?

In welcher Situation sollten wir protected Modifikator verwenden? Ich weiß nicht, wann ich einen protected Modifikator verwenden sollte, also verwende ich immer public. Ist es richtig?

+0

Ich ermutige Sie, die Zugriffsmodifikatoren zu überprüfen und wann sie zu verwenden https://docs.oracle.com/javase/tutorial/java/javaOO/accesscontrol.html, wie mit anderen normalen Objekt die Methoden in einem Dao-Klasse sollten Seien Sie öffentlich, wenn sie von anderen Objekten aufgerufen werden, Sie können so viele wie Sie wollen und wenn Sie nicht einige von ihnen dann ungeschützt oder privat machen wollen, ist es normal – karelss

Antwort

2

Geschützt ist nicht wirklich sinnvoll für DAOs, da Sie die Methoden in anderen Paketen benötigen, in Klassen, die das DAO nicht implementieren. Deshalb ist Öffentlichkeit fast immer der richtige Weg.

+0

das ist nicht ganz genau – karelss

+0

@ karelss warum Sie denken Das? – michigan

+0

Da DAOs vererbt werden können und Sie geschützte Methoden definieren können, um bei Operationen zu helfen und vielleicht auf einen Webservice zuzugreifen, kann eine Datenbank und die Definition privater oder geschützter Methoden dazu beitragen, funktionsübergreifende Funktionen wie Authentisierung oder Serviceerstellung zu entkoppeln Funktionalität.Meiner Meinung nach ist alles öffentlich ein Fehler als Standardregel für Daos, weil dies in einigen Fällen dazu führen kann, dass schlechte Schnittstellen entworfen und größere Methoden entwickelt werden, auch wenn in einem Dao viele öffentliche Methoden definiert werden müssen, vielleicht sollte diese Klasse sein aufgeteilt in zwei oder mehr. – karelss

3

Die DAO-Schicht wird hauptsächlich für Datenbanktransaktionen verwendet. Zum Beispiel: Speichern, Aktualisieren, Holen usw.

Jetzt haben sie keine Geschäftslogik in ihnen, weil wir die Geschäftslogik in die Service-Schicht legen. Normalerweise ruft diese Service-Schicht die DAO-Schicht immer dann auf, wenn eine datenbankbezogene Arbeit erforderlich ist.

Daher sollte public in den meisten Fällen (wie sie von einer anderen Schicht/Paket aufgerufen werden) alle zusammen verwendet werden.

Geschützt ist, wenn Sie sicher sind, dass Sie nur aus demselben Paket (oder Unterklassen) anrufen, was nicht immer der Fall ist. Also nein, protected wird nicht empfohlen.

2

Für DAO-Klassen sollten Sie eine Schnittstelle mit Dao-Methoden deklarieren (die natürlich öffentlich sein wird). Ihre DAO-Klassen sollten die Schnittstelle erweitern. Auf diese Weise werden Ihre Dao-Methoden von anderen Klassen über die Schnittstellenreferenz aufgerufen.

Es ist der bessere Weg, weil es einfach zu testen ist. Sie können eine Scheinimplementierung der DAO-Schnittstelle bereitstellen, um Ihren Code zu testen. Sie können dies tun, bevor Sie Ihre eigentliche DAO-Klasse schreiben. Wenn Sie DAO-Methoden mit einer Schnittstellenreferenzvariable aufrufen, können Sie Ihre DAO-Klasse ändern, und sie funktioniert weiterhin, weil Sie die Klasse und nicht die Schnittstelle ändern, deren Referenz Sie zum Aufrufen der Methoden verwenden (umbenennen des Klassennamens für ein Beispiel).

Es ist das wichtige Designprinzip, dass Sie immer wo immer möglich eine Schnittstelle codieren sollten. Ich empfehle Ihnen, this answer zu lesen, warum Sie für Schnittstellen in DAO codieren sollten.

Sie sollten den geschützten Modifikator im Falle einer Vererbung verwenden. Wenn Sie außerhalb des Pakets möchten, sollten nur untergeordnete Klassen auf die Methoden und Eigenschaften Ihrer Klasse zugreifen können. wenn Sie etwas tun müssen, das nicht in der öffentlichen API verfügbar gemacht werden soll, aber dennoch von Unterklassen überschrieben werden muss, zum Beispiel template method pattern.

Verwandte Themen