Hallo, auf Grund eines anderen Threads, wurde mir vorgeschlagen, ich solle zur Umsetzung eines Vorhabens ein Interface entwickeln. Ich möchte mit MessageQueues arbeiten, mir aber offen halten, welchen Broker ich benutze bzw. in Zukunft benutzen will. Nun habe ich ein Interface entwickelt und soweit alles umgesetzt. Das Wechseln zwischen Brokern geht auch. Nun wollte ich dennoch wissen, ob ich alles richtig umgesetzt habe. Vielleicht mache ich mir dennoch zu viel Arbeit da man es auch einfacher Schreiben kann.
Meine Vorgehensweise:
1. Interface deklarieren
2. TInterfacedObject von Interface ableiten (für MSMQ) und Methoden erstellen
3. TInterfacedObject von Interface ableiten (für ActiveMQ) und Methoden erstellen
4. Eigenes Objekt erstellen, welches die gleichen Methoden hat, wie das Interface. So kann ich dieses Objekt programmweit benutzen. Intern ruft es die Methode des jeweils benötigten InterfaceObjects auf.
Vielleicht blöd erklärt, daher hier nochmal ganz knapp der Quelltext:
1. Eigenständige
Unit für Interfaces & Co.
Delphi-Quellcode:
//Das Interface
IMy_MQ = interface
['{5C3F02B1-2E73-4500-9CD3-02EAFEDB332C}']
function CreateQueue(path: String): Boolean;
end;
TMQBroker = (mqMS, mqActiveMQ);
//Objekt für Microsoft MessageQueue
TMy_MSMQ = class(TInterfacedObject, IMy_MQ)
function CreateQueue(path: String): Boolean;
end;
//Objekt für Apache ActiveMQ
TMy_ActiveMQ = class(TInterfacedObject, IMy_MQ)
function CreateQueue(path: String): Boolean;
end;
//Objekt, welches programmweit benutzt wird
TMy_MQ = class(TObject)
private
fBroker: TMQBroker;
fMQ: IMy_MQ;
public
constructor Create(mqBroker: TMQBroker = mqMS);
destructor Destroy;
function CreateQueue(Path: String): Boolean;
property Broker: TMQBroker read fBroker write fBroker;
end;
//////////
function TMy_MSMQ.CreateQueue(path: string): Boolean;
begin
ShowMessage('MSMQ '+path);
end;
function TMy_ActiveMQ.CreateQueue(path: string): Boolean;
begin
ShowMessage('ActiveMQ '+path);
end;
constructor TMy_MQ.Create(mqBroker: TMQBroker = mqMS);
begin
fBroker:=mqBroker;
if (mqBroker = mqMS) then
begin
fMQ:=TMy_MSMQ.Create;
end else if (mqBroker = mqActiveMQ) then
begin
fMQ:=TMy_ActiveMQ.Create;
end;
end;
Programmiert wird dann nur noch mit Hilfe von TMy_MQ in folgender Form
Delphi-Quellcode:
procedure TForm1.Button2Click(Sender: TObject);
var
sacom_mq: TSacom_MQ;
begin
Sacom_MQ:=TSacom_MQ.Create(mqActiveMQ); //oder halt eben mqMS
Sacom_MQ.CreateQueue('test');
Sacom_MQ.Destroy;
end;
Soll der Broker gewechselt werden, einfach im Construkter den gewünschten eintragen.
Macht man das so, oder kann ich mir den Weg über TMy_MQ irgendwie ersparen?
Danke sehr!