Forum: Object-Pascal / Delphi-Language
by mjustin,
23. Dez 2014
Angenommen in der Applikation ist eine MSMQBrokerClient Klasse als private Property "MyMSMQBrokerClient" erzeugt worden.
Diese eine Instanz wird dann in einer Factory Methode verwendet die eine Connection liefert:
function TMyApp.CreateConnection: IConnection;
begin
Result := MyMSMQBrokerClient.CreateConnection;
end;
Und dann kann im Programm an beliebigen Stellen - die natürlich...
Forum: Object-Pascal / Delphi-Language
by mjustin,
23. Dez 2014
Das ist sicher ein Missverständnis: die konkrete Klasse wird im Programm nur an einer Stelle benötigt, um einen Interfacezeiger zu erhalten, ab diesem Punkt wird dann nur noch mit dem Interface gearbeitet.
Falls im Programm an verschiedenen Stellen eine neue Instanz der Klasse benötigt wird, kann man die Erzeugung in eine zentrale Factorymethode auslagern. Auch dann wird nur ein Mal die...
Forum: Object-Pascal / Delphi-Language
by mjustin,
23. Dez 2014
Oder auch so:
type
IConnection = interface
procedure Start;
procedure Send(AMessage: string);
function Receive(ATimeout: Integer): string;
procedure Stop;
end;
IMessageBrokerClient = interface
Forum: Object-Pascal / Delphi-Language
by mjustin,
23. Dez 2014
In einem Edit meines Beitrags habe ich angemerkt, dass diese Flexibilität auch einen Preis, nämlich eine entsprechend größere Anwendungsdatei hat, da auch die Implementierungs-Klassen für alle unbenutzten Message Broker eingebunden werden.
(Man könnte aber durch Einsatz von IFDEF verschiedene Versionen der Anwendung erstellen, die je nach Bedarf nur einen Message Broker oder eine Auswahl (zwei...
Forum: Object-Pascal / Delphi-Language
by mjustin,
23. Dez 2014
Mein Vorschlag (und meine Präferenz) wäre es, für jeden Broker eine konkrete Implementierungsklasse zu bauen die ein allgemeines Interfaces unterstützt.
Minimales Beispiel:
IMessageBrokerClient = interface
...
end;
TActiveMQClient = class(TInterfacedObject, IMessageBrokerClient)
...
end;