![]() |
Re: Prüfsoftware möglichst objektorientiert programmieren...
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 |
Re: Prüfsoftware möglichst objektorientiert programmieren...
*push*
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 17:28 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz