@Stevie:
Die Trennung ist wirklich stark, da diese komplett von der "Framework-Magic" übernommen wird.
Meine Lösung entspricht weitgehend meiner Lösung auf Seite 1 mit dem Zusatz:
Delphi-Quellcode:
procedure List.SelectIndexChange(...);
begin
TOperation(Form1.List1.SelectedItem).SetVisualComponent(MyVisualAttributes);
end;
// ---
type
TVisualAttributes = class
op1, op2: TEdit;
result: TEdit;
[...]
end;
TAddition, TSubtraction, ... sind von TOperation abgeleitet.
In TOperation.SetVisualComponent(vc) wird die visuelle Komponente im Business-Objekt ersetzt und es werden alle ChangeEvents aufgerufen:
Delphi-Quellcode:
procedure TOperation.SetVisualComponent(vc: TVC);
begin
self.visualComponent := vc;
if vc <> nil then begin
resultChangeEvent(...); // hier muss man sich überlegen,
// ob die Werte (Zahl1, Zahl2) vorhanden sind bzw. sein sollen.
// Sonst: nach SetVisualComponent
// TOperation(Form1.List1.SelectedItem).Execute aufrufen
end;
end;