Frage

Ich baue eine kleine Website für Spaß / Lernen eines ziemlich Standard-Web / Service / Data Access Schichtdesign.

Um mich zu retten von ständig Instanzen meiner Dienstschicht / Datenzugriffsschicht Klassen erstellen zu müssen, ich habe die Methoden in allen statischen gemacht. Ich sollte nicht Concurrency Probleme bekommen, wie sie etc lokale Variablen verwenden und gemeinsam nutzen keine Ressourcen (Dinge sind einfach genug für diese im Moment).

Soweit ich den einzigen Kompromiss für diese sehen kann, ist, dass ich wirklich keinen echten OO Ansatz folgen, aber dann wieder hält er den Code viel sauberer.

Gibt es einen Grund dies kein gangbarer Weg sein würde? Welche Art von Problemen könnte später entstehen? Wäre es besser, eine „Fabrik“ Klasse zu haben, die mir Instanzen der Service und die Datenschicht Klassen je nach Bedarf zurückkehren kann?

War es hilfreich?

Lösung 3

Nachteile:

  • Sie können keine Unit-Tests schreiben, da Sie nicht in der Lage sein werden, mock Datenzugriff / Business-Logik-Objekte schreiben gegen testen.
  • Sie werden Concurrency Probleme haben als andere Threads versuchen, den statischen Code zur gleichen Zeit zugreifen -. Oder wenn Sie statische Methoden synchronisiert verwenden, werden Sie mit einem Gewinde Schlange zu verwenden, um die statischen Methoden am Ende
  • Sie werden nicht Instanzvariablen nutzen können, was eine Einschränkung zu machen, da der Code immer komplexer wird.
  • Es wird schwierige Elemente der Geschäfts- oder Datenzugriffsschichten zu ersetzen, wenn Sie müssen.
  • Wenn Sie Ihre Anwendung auf diese Weise zu schreiben, würden Sie besser dran, in einer Sprache entwickelt, auf diese Weise zu arbeiten, wie PHP.

Sie wäre besser dran, wenn man für nicht-statische Business / Datenzugriffsschicht Klassen entweder:

  • Verwenden des Singletonmuster (eine einzelne Instanz jeder Klasse zu schaffen und sie zwischen Threads Sharing) ...
  • oder Instanzen der Klassen in jedem Thread zu schaffen, wie und wann sie benötigt werden.

Beachten Sie, dass jeder Benutzer / Sitzung zu Ihrer Anwendung verbunden wird in einem eigenen Thread ausgeführt werden, -. So Ihre Web-Anwendung ist von Natur aus multi-threaded

Andere Tipps

Sie kennen die Fahrten im Freizeitpark, wo sie „Bitte halten Sie Ihre Hände und Füße in der Fahrt jederzeit“ sagen? Es stellt sich heraus die Fahrt viel mehr Spaß, wenn Sie dies nicht tun. Der einzige wirkliche Nachteil ist, dass Sie nicht wirklich eine echte folgende keeping-your-hands-und-Fuß-inside-the-ride-at-all-mal Ansatz.

Der Punkt ist - es gibt einen Grund, warum Sie einen „echten OO-Ansatz“ folgen sollten, so wie es ein Grund, Ihre Hände und Füße in der Fahrt zu halten - es großer Spaß macht, bis Sie überall anfangen zu bluten.

Die Art und Weise Sie es beschreiben, ist dies nicht die „falsche“ Ansatz per se, aber ich sehe nicht wirklich das Problem Sie versuchen zu vermeiden. Sie können nicht nur eine einzelne Instanz dieser Business-Objekte erstellen, wenn der Server gestartet und auf Ihre Servlets geben sie bei Bedarf?

Wenn Sie bereit sind OO aus dem Fenster werfen Sie auch die Singleton-Muster überprüfen mögen.

Ich sehe nicht wirklich den Vorteil, dass Ihr Design, und es gibt viele Dinge, die schief gehen könnten. Sie sind eine einzige Zeile Code zu speichern, vielleicht? Hier einige Nachteile auf Ihren Ansatz:

  • Sie können nicht ohne weiteres ersetzen Implementierungen Ihrer Business-Logik
  • Sie können keine Instanzvariablen definiert erleichtern Logik in mehrere Methoden Zerschlagung
  • Ihre Annahme, dass Multi-Thread-Probleme nicht auftreten werden mit ziemlicher Sicherheit falsch ist
  • Sie können sie nicht leicht verspotten den Zweck zu testen

Ich sehe nicht wirklich, dass der Verzicht auf eine Zeile Code Sie etwas kauft.

Es ist nicht wirklich ein „OO Design“ Problem, sondern eher eine Angemessenheit. Warum sind Sie mit sogar Java in einer solchen Verfahrens Art und Weise? Sicher würde PHP auf diese Art von Design besser geeignet sein (und tatsächlich sparen Sie Zeit, nicht zu kompilieren und zu implementieren haben).

ich würde nur Ihre Business-Schicht nicht statisch machen; es wird es viel macht so leichter zu pflegen, zu ändern und Ihre Anwendung entwickeln.

Sie können Schwierigkeiten Komponententests haben Ihre Objekte mit dieser Art von Architektur. Zum Beispiel, wenn Sie eine Ebene von Business-Objekten, die Ihre statische Datenzugriffsschicht verweisen, könnte es schwierig sein, die Business-Schicht zu testen, da Sie nicht in der Lage sein werden, leicht Zugang Mock Datenobjekte zu verwenden. Das heißt, wenn Sie Ihre Business-Schicht zu testen, werden Sie wahrscheinlich nicht wollen, die „echten“ Methoden in der Datenzugriffsschicht verwenden, da sie unerwünschte Änderungen in Ihrer Datenbank machen. Wenn Ihre Datenzugriffsschicht nicht statisch war, Sie zu Testzwecken Mock Datenzugriff Objekte in Ihrer Business-Schicht zur Verfügung stellen könnten.

Ich würde denken, dass Sie Parallelitätsprobleme mit allen statischen Methoden mit mehreren Benutzern haben. Die Web-Schicht wird gleichzeitig angemeldeten Benutzer Thread aus. Können alle Ihre statischen Methoden damit umgehen? Vielleicht, aber nicht sie ständig in Schlange stehen die Anforderungen in einzelnen Datei gesperrt werden? Ich bin nicht sicher, nie versucht, Ihre Idee.

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