Grundlegend bei den Entwürfen ist aber, dass die Views nicht die ViewModels/Controller erzeugen, denn sonst geht der gesamte Vorteil der Testbarkeit sofort flöten und die Views übernehmen auf einmal wieder die Kontrolle.
danke für deine Antwort.
Was die Testbarkeit angeht, verstehe ich dich nicht ganz. Warum sollte diese flöten gehen...? ich habe doch mit diesem Konzept die BusinessLogik sauber von der
GUI (View) getrennt.
oder nicht?
Wenn die View den Controller erstellt, dann eben nicht.
Mein MainViewModel kann ich testen ohne irgendeine View im Spiel zu haben.
Delphi-Quellcode:
procedure Test;
var
LVM : TMainViewModel;
begin
LVM := TMainViewModel.Create;
try
Assert( LVM.SomeAction.CanExecute );
Assert( not Assigned( LVM.Activity ) );
LVM.SomeAction.Execute;
Assert( not LVM.SomeAction.CanExecute );
Assert( Assigned( LVM.Activity ) );
while not LVM.CanClose do
Sleep(10);
Assert( LVM.SomeAction.CanExecute );
Assert( not Assigned( LVM.Activity ) );
finally
LVM.Free;
end;
end;
Ich kann auch die gesamte Anwendung durchlaufen lassen ohne ein einziges View zu erzeugen, denn die View wird erzeugt, wenn es ein ViewModel gibt und nicht umgekehrt, das ViewModel wird erzeugt, wenn es eine View gibt.
Du willst aber eine Aktion per Event an die View geben, die dann eine neue View mit Controller erstellt und dann soll dieser Controller irgendwie eingebunden werden. Schwups ist die Abhängigkeit von der View wieder da und wir haben nichts gewonnen, nur mehr Schreibarbeit.
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ea 0a 4c 14 0d b6 3a a4 c1 c5 b9
dc 90 9d f0 e9 de 13 da 60)