4 Stimmen

Vermeidung von Dialog-Boilerplate in Delphi und /oder C++

Ich muss oft ein Dialogfeld in Delphi/C++Builder entwerfen, mit dem verschiedene Eigenschaften eines Objekts geändert werden können, und der entsprechende Code sieht in der Regel wie folgt aus.

Dialog.Edit1.Text := MyObject.Username;
Dialog.Edit2.Text := MyObject.Password;
// ... many more of the same

if (Dialog.ShowModal = mrOk) 
begin
  MyObject.Username := Dialog.Edit1.Text;
  MyObject.Password := Dialog.Edit2.Text;
  // ... again, many more of the same
end;

Außerdem benötige ich oft ähnlichen Code für das Marshalling von Objekten in/aus Xml/Ini-Dateien/was auch immer.

Gibt es gängige Idiome oder Techniken, um diese Art von einfachem, aber sich wiederholendem Code zu vermeiden?

0voto

wilhelmtell Punkte 55189

Nachschlagen " Vermittlerstruktur ". Es handelt sich um ein GoF-Entwurfsmuster, und in ihrem Buch motivieren die GoF dieses Entwurfsmuster tatsächlich mit einer ähnlichen Situation wie der, die Sie hier beschreiben. Es zielt darauf ab, ein anderes Problem zu lösen - die Kopplung - aber ich denke, Sie haben dieses Problem auch.

Kurz gesagt, die Idee ist, einen Dialogvermittler zu erstellen, ein zusätzliches Objekt, das sich zwischen alle Dialog-Widgets setzt. Kein Widget weiß über ein anderes Widget Bescheid, aber jedes Widget kennt den Mediator. Der Vermittler kennt alle Widgets. Wenn sich ein Widget ändert, informiert es den Mediator; der Mediator informiert dann die entsprechenden Widgets darüber. Wenn Sie zum Beispiel auf OK klicken, kann der Mediator andere Widgets über dieses Ereignis informieren.

Auf diese Weise kümmert sich jedes Widget nur um Ereignisse und Aktionen, die es selbst betreffen. Der Mediator kümmert sich um die Interaktion zwischen allen Widgets, so dass all dieser "Boilerplate"-Code auf alle Widgets aufgeteilt wird, und der "Rest", der für alle Widgets global ist, ist die Interaktion, und die liegt in der Verantwortung des Mediators.

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