9 Stimmen

Erlang und Singleton gute Praxis?

Da Erlang nicht wirklich objektorientiert ist, gibt es keine echte Singleton-Klasse, aber ich denke, dass ein Prozess, der registriert ist, als solcher verwendet werden kann.

Ist es eine gute Praxis, registrierte Prozesse innerhalb einer Anwendung zu verwenden, um den Zugriff einfacher zu machen? Ein Nachteil, den ich sehe, ist beispielsweise, dass Sie nicht mehr als eine Instanz einer solchen Anwendung innerhalb eines Knotens ausführen können.

Nehmen Sie als Beispiel eine GUI-Anwendung mit einem Prozess, der die Ereignisse verwaltet, und einem anderen, der für den Sound verantwortlich ist. Wäre es eine gute Praxis, diese beiden "Singletons" als registrierte Prozesse zu definieren und sie wie sound:play(file_name) aufzurufen, anstatt die PID zu speichern und sound:play(Pid, file_name) zu verwenden?

9voto

Justin Sheehy Punkte 1796

Es ist ziemlich üblich, einen gen_server unter einem registrierten Namen zu verwenden, um genau das zu tun. Sie können Funktionen aus demselben Modul exportieren, die einfach eine gen_server:call gegen den benannten Prozess in Frage durchführen.

(Man könnte argumentieren, dass Erlang mehr "wirklich" OO ist als das, woran Sie wahrscheinlich gewöhnt sind. Aber darum geht es bei dieser Frage nicht.)

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X