Einzelnen Beitrag anzeigen

DelphiManiac

Registriert seit: 5. Dez 2005
742 Beiträge
 
#11

Re: Prüfsoftware möglichst objektorientiert programmieren...

  Alt 24. Jul 2007, 15:16
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
  Mit Zitat antworten Zitat