Einzelnen Beitrag anzeigen

Benutzerbild von sx2008
sx2008

Registriert seit: 16. Feb 2008
Ort: Baden-Württemberg
2.332 Beiträge
 
Delphi 2007 Professional
 
#6

AW: Wie ist der Programmierstil "professionell"

  Alt 17. Nov 2012, 00:28
Wenn's "professionell" sein soll, dann muss man die Businesslogik extrahieren und entsprechend abbilden.
Wenn man viele Anweisung hat, die mehr als einen Punkt enthalten, dann müssen die Alarmglocken klingeln:
Delphi-Quellcode:
procedure TfrmXXX.ZeileDelExecute(Sender: TObject);
begin
   // wir befinden uns in der Klasse TfrmXXX
   // und trotzdem greifen wir immer wieder auf die internen Dinge des Datenmoduls
   // TdmXXX zu
   dmXXX.qGETFertigteileeingang.ParamByName('AZID').AsInteger := dmXXX.AZQ.fieldbyname('AZ.ID').asinteger;
   // und hier schon wieder - 2. Punkte in einer Anweisung
   // das "stinkt"
   dmXXX.qGETFertigteileeingang.Open;
Also es ist klar, der Code zum Auslesen der Anzahl der Fertigteile gehört in das Datenmodul
Delphi-Quellcode:
function TdmXXX.GetFertigteileAnzahl(azid : Integer):integer;
begin
   qGETFertigteileeingang.ParamByName('AZID').AsInteger := azid;
   qGETFertigteileeingang.Open;
   result := qGETFertigteileeingang.FieldByName('Anzahl').AsInteger;
   qGETFertigteileeingang.close;
end;
Und jetzt zum 2. Problem:
Es wird MessageDlg() verwendet wo eigentlich eine Exception ausgelöst werden sollte:
Delphi-Quellcode:
procedure TfrmXXX.ZeileDelExecute(Sender: TObject);
var
  anzahl : Integer;
  azid : Integer;
begin
  azid := dmXXX.AZQ.fieldbyname('AZ.ID').asinteger;
  anzahl := dmXXX.GetFertigteileAnzahl(azid);
  if (anzahl > 0) then
    // Exception auslösen und dem Benutzer möglichst genaue Info geben wo das Problem ist
    raise Exception.CreateFmt('Löschen der Auftragszeile NICHT möglich, da bereits %d Fertigteile daraus eingebucht wurden (azid=%d)', [anzahl, azid]);
  Mit Zitat antworten Zitat