Frage

Ich arbeite an einer Firefox-Erweiterung, wo ich mehrere Fenster synchron mit den gleichen Informationen behalten wollen werde. Die Symbolleiste fragt einen Remote-Server für Informationen in regelmäßigen Abständen, basierend auf, wenn das Fenster geöffnet wurde. Da Firefox-Fenster alle separat in sich geschlossene Umgebungen, jede mit ihren eigenen Symbolleiste separaten Code ausgeführt Ich dachte, ich hier ein Singleton verwenden würde. Es gibt wirklich keine Notwendigkeit für mehrere Anforderungen, kann es für jedes der Fenster eine Anfrage sein, obwohl das Problem ist, dass es kein Master-Rahmen über lording es über den mehr Fenster Kontext global ist, gibt es nur Fenster Kontexte. Ich dachte, ich würde eine Fabrik Klasse erstellen, wenn eines des Fensters zu sehen, prüft bereits eine Instanz meiner Benachrichtigungsklasse Lauf hat und wenn verwendet, so dass gleiche Instanz Updates zu erhalten.

Es scheint wie eine legitime Verwendung eines Singleton, aber ich halte das Lesen darüber, wie sie sind böse Tiere. Ist dies eine oke Verwendung?

War es hilfreich?

Lösung

Das Problem ist, dass jeder Firefox-Fenster ein völlig separater Prozess ist so weit wie Javascript betroffen ist.

Also ja, es wird funktionieren, aber nur, wenn Sie bedingt die Singleton erstellen. Wenn es nur bedingungslos auf globalem Bereich erstellt (in meinem meinem Fall als Mitglied meines Top-Level-Erweiterungsobjekts), es wird in allen Fenstern sein.

Das andere Problem, das Sie haben werden, ist, dass Fenster eine Weile dauern, Javascript zu starten und zu betreiben, und Sie nicht so etwas wie die Synchronisation haben. Es ist durchaus möglich, dass Fenster 1 prüft, ob Fenster 2 die Singleton erstellt hat, sieht es nicht, Fenster 2 Prüffenster 1 hat, sieht es nicht, hat und dann beide ihre eigenen Singletons erstellen.

Ich spreche aus Erfahrung: Ich schrieb eine Firefox-Erweiterung, die etwas tut, sehr viel wie das, was Sie tun mögen: nur ein Fenster sollte den Remote-Server (und alle andere Fenster müssen informiert werden, wenn ein Fenster schließt) überprüfen .

(Im Hinblick auf meinem jedes Fenster auf Start-up-Abfragen alle anderen Fenster die „Master“ Fenster zu finden.)

Der Reiniger Weg, um dies ist es, einen Dienst zu erstellen, wie die, die der Browser Javascript aussetzt; aber das erfordert in C bei der Codierung, nicht JavaScript und macht teh Verlängerung Querplattform mehr Schmerz installieren.

Andere Tipps

Es ist nichts falsch mit einem Singleton, per se. Das Problem liegt darin, wie es sein kann (ab) verwendet: es ist im Wesentlichen eine andere Art Globals zu haben. Ein Singleton nur können Sie einen Dereferenzierungsebene haben, dass die meisten dieser Daten selbst enthält. Manchmal aber ist dieses Muster die einzige Möglichkeit, bestimmte Probleme zu lösen. In diesem Fall ist es völlig in Ordnung. Wenn Sie jedoch eine anderen Art und Weise denken, dass vielleicht nur verwendet ein wenig mehr Code / Speicher / Performance-Hit zu erreichen, würde ich mit dem gehen, wenn ich könnte. Ansonsten gibt es wirklich nichts falsch mit einem Singleton verwenden, solange Sie sich bewusst sind, was Sie sich einlassen.

Singletons selbst sind nicht böse. Es ist ihr Missbrauch, ist ... (Sie in der Regel mit der Verwendung von DI-Container wegkommen kann die Instanz „singletoned“ zu haben, die dieses Muster macht eher weniger empfehlenswert).

Ich habe keine Erfahrung im Bereich, den Sie beschreiben. Allerdings Singleton mir scheint, wie vernünftige Option.

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