Hallo @all
wollte euch mal auf dem Laufendem halten, was meine Prüfsoftware angeht, und mit euch ein wenig
diskutieren, wie und was man optimieren / ändern kann / sollte.
Habe ja, denke wie viele das Problem, dass ich meine Datenhaltung und Logik von meiner Darstellung trennen will,
das habe ich auch sehr strikt gemacht, die
GUI kennt bei meiner Prüfsoftware eigentlich nur das Objekt
zur Prüfungsverwaltung (das die Prüfungen ausführt).
Das heißt meine TTestControl Klasse verwaltet Prüfobjekte (vom Typ TTest) in einer Liste, die es dann wenn es
aufgefordert wird nacheinander startet.
Die
GUI (bzw) der Controller der
GUI erzeugt nun, die zu testenden Tests und übergibt sie den TTestcontrol Objekt
sieht dann ungefähr so aus:
Delphi-Quellcode:
with FrmMainGUI do
begin
einIniFile:=TIniFile.Create(ProgrammDataset.IniName);
einControlTest.ClearTest; // Liste leeren
einControlTest.OnShowFortschrittGesamt:=FrmMainGUI.ShowFortSchrittTestGesamt;
if cbCom2EPTPruef.Checked then
begin
einIniFile.WriteInteger('TestConfig','Com2EPTPruef',1);
einTest:=TTestCommu2EPTPruef.Create;
einTest.OnShowProgress:=FrmMainGUI.ShowFortSchrittTest;
einControlTest.AddTest(einTest);
end
else
begin
einIniFile.WriteInteger('TestConfig','Com2EPTPruef',0);
end;
if cbComm2Calibrator.Checked then
begin
einIniFile.WriteInteger('TestConfig','Com2Calibrator',1);
einTest:=TTestCommu2Calibrator.Create;
einTest.OnShowProgress:=FrmMainGUI.ShowFortSchrittTest;
einControlTest.AddTest(einTest);
end
else
begin
einIniFile.WriteInteger('TestConfig','Com2Calibrator',0);
end;
if cbComm2Multimeter.Checked then
begin
einIniFile.WriteInteger('TestConfig','Com2Multimeter',1);
einTest:=TTestCommu2Multimeter.Create;
einTest.OnShowProgress:=FrmMainGUI.ShowFortSchrittTest;
einControlTest.AddTest(einTest);
end
else
begin
einIniFile.WriteInteger('TestConfig','Com2Multimeter',0);
end;
if cbComm2EPT.Checked then
begin
//
end;
if cbUSBControllerParamet.Checked then
begin
einIniFile.WriteInteger('TestConfig','USBControllerParamtetrieren',1);
einTest:=TTestProgramFTDI.Create;
einTest.OnShowProgress:=FrmMainGUI.ShowFortSchrittTest;
einControlTest.AddTest(einTest);
end
else
begin
einIniFile.WriteInteger('TestConfig','USBControllerParamtetrieren',0);
end;
if cbFlash.Checked then
begin
einIniFile.WriteInteger('TestConfig','Flashen',1);
einTest:=TTestFlashADuC.Create(ProgrammDataset.FlashPfad);
einTest.OnShowProgress:=FrmMainGUI.ShowFortSchrittTest;
einControlTest.AddTest(einTest);
end
else
begin
einIniFile.WriteInteger('TestConfig','Flashen',0);
end;
if cbParameter.Checked then
begin
einTest:=TTestWriteParameter.Create(ProgrammDataset.Parameterdatei);
einTest.OnShowProgress:=FrmMainGUI.ShowFortSchrittTest;
einControlTest.AddTest(einTest);
einIniFile.WriteInteger('TestConfig','ParameterUebertragen',1);
end
else
begin
einIniFile.WriteInteger('TestConfig','ParameterUebertragen',0);
end;
if cbDisplayTest.Checked then
begin
einIniFile.WriteInteger('TestConfig','DisplayTastenTest',1);
einTest:=TTestTasten.Create;
einTest.OnShowProgress:=FrmMainGUI.ShowFortSchrittTest;
einControlTest.AddTest(einTest);
end
else
begin
einIniFile.WriteInteger('TestConfig','DisplayTastenTest',0);
end;
if cbPruefeRelais.Checked then
begin
einIniFile.WriteInteger('TestConfig','RelaisTest',1);
einTest:=TTestRelais.Create;
einTest.OnShowProgress:=FrmMainGUI.ShowFortSchrittTest;
einControlTest.AddTest(einTest);
end
else
begin
einIniFile.WriteInteger('TestConfig','RelaisTest',0);
end;
if cbDataLoggerClock.Checked then
begin
einIniFile.WriteInteger('TestConfig','DatenloggerSetTimeDate',1);
einTest:=TTestDataLoggerClock.Create;
einTest.OnShowProgress:=FrmMainGUI.ShowFortSchrittTest;
einControlTest.AddTest(einTest);
end
else
begin
einIniFile.WriteInteger('TestConfig','DatenloggerSetTimeDate',0);
end;
if cbKalibriereAnalogEingang.Checked then
begin
einIniFile.WriteInteger('TestConfig','AnalogEingangKalibrierung',1);
einTest:=TTestKalibriereAnalogEingang.Create;
einTest.OnShowProgress:=FrmMainGUI.ShowFortSchrittTest;
TTestKalibriereAnalogEingang(einTest).OnDigitEvent:=frmMainGUI.ShowDigtTest;;
einControlTest.AddTest(einTest);
end
else
begin
einIniFile.WriteInteger('TestConfig','AnalogEingangKalibrierung',0);
end;
if cbKalibriereCTEingang.Checked then
begin
einIniFile.WriteInteger('TestConfig','CTEingangKalibrierung',1);
einTest:=TTestKalibriereCTEingang.Create;
einTest.OnShowProgress:=FrmMainGUI.ShowFortSchrittTest;
TTestKalibriereCTEingang(einTest).OnDigitEvent:=frmMainGUI.ShowDigtTest;;
einControlTest.AddTest(einTest);
end
else
begin
einIniFile.WriteInteger('TestConfig','CTEingangKalibrierung',0);
end;
if cbOLCTTest.Checked then
begin
einIniFile.WriteInteger('TestConfig','OLCTTest',1);
einTest:=TTestOLCTModul.Create;
einTest.OnShowProgress:=FrmMainGUI.ShowFortSchrittTest;
einControlTest.AddTest(einTest);
end
else
begin
einIniFile.WriteInteger('TestConfig','OLCTTest',0);
end;
if cbPT100Kalibrierung.Checked then
begin
einIniFile.WriteInteger('TestConfig','PT100Kalibrierung',1);
einTest:=TTestKalibrierePT100Eingang.Create;
TTestKalibrierePT100Eingang(einTest).OnDigitEvent:=frmMainGUI.ShowDigtTest;;
einTest.OnShowProgress:=FrmMainGUI.ShowFortSchrittTest;
einControlTest.AddTest(einTest);
end
else
begin
einIniFile.WriteInteger('TestConfig','PT100Kalibrierung',0);
end;
if cbAnalogOut1.Checked then
begin
einIniFile.WriteInteger('TestConfig','AnalogAusgang1Kalibrierung',1);
einTest:=TTestKalibriereAnalogAusgang.Create(1);
// TTestKalibrierePT100Eingang(einTest).OnDigitEvent:=frmMainGUI.ShowDigtTest;;
einTest.OnShowProgress:=FrmMainGUI.ShowFortSchrittTest;
einControlTest.AddTest(einTest);
end
else
begin
einIniFile.WriteInteger('TestConfig','AnalogAusgang1Kalibrierung',0);
end;
if cbAnalogOut2.Checked then
begin
einIniFile.WriteInteger('TestConfig','AnalogAusgang2Kalibrierung',1);
einTest:=TTestKalibriereAnalogAusgang.Create(2);
// TTestKalibrierePT100Eingang(einTest).OnDigitEvent:=frmMainGUI.ShowDigtTest;;
einTest.OnShowProgress:=FrmMainGUI.ShowFortSchrittTest;
einControlTest.AddTest(einTest);
end
else
begin
einIniFile.WriteInteger('TestConfig','AnalogAusgang2Kalibrierung',0);
end;
end;
end;
Gut, die Logik (was ein Test machen muss) kennt nur das Testobjekt, genauso wie die Daten, die es erzeugt testet, oder
sonst was damit macht (zB.: kalbrieren).
Ich habe nun ein Event, an das die
GUI sich anmelden kann und dann Daten übergeben bekommt zur Anzeige.
Mein Problem ist nun, da die Tests ja sehr unterschiedlich sind (d.h. auch unterschiedliche Daten) muss das Event ja
auch überall anders aussehen, und dann muss ich ja sehr viele Events erzeugen usw...
Kann man das irgendwie Objektorientiert besser lösen,
bin über jeden Vorschlag dankbar
Gruß
DelphiManiac