Thomas B. hat geschrieben:Ich bin da anderer Meinung.
Die Unit/DLL von der Messkarte sollte autark ihre Fehlermeldungen darstellen können
Eine Datenklasse sollte
niemals irgendetwas darstellen. Denn stell dir mal vor, du hättest eine Klasse, nehmen wir einfach mal an einen HTML Parser, eine Klasse die grundsätzlich nichts mit grafischer Darstellung zu tun hat. Nun sagst du, bei einem Parsingfehler soll diese Klasse selbst die Fehlermeldung darstellen. Das funktioniert auch für deine Anwendung schön und gut, du verwendest eine Messagebox und bist Happy. Dann willst du ein Programm schreiben was wieder den HTML Parser verwendet, allerdings kein Grafisches Interface besitzt (z.B. eine Konsolenanwendung für einen Command Line Linux Server). Dann musst du die Unit kopieren, und alle Vorkommen von MessageBox durch WriteLn ersetzen. Spaß macht das nicht.
Das hauptproblem ist nun aber, du hast 2 mal die Grundsätzlich gleiche Klasse, das heißt bei Optimierungen, Erweiterungen, Bugfixes, etc. musst du immer dran denken es bei beiden Klassen zu machen. Dann vergisst du es, denkst die Funktion wäre anders (weil sie es bei der anderen Klasse ist) und dir fliegt alles um die Ohren.
Wenn du dann noch eine Implementierung haben möchtest die die Fehler nicht anzeigt sondern nur logt (oder schlicht weg ignoriert) hast du sogar 3 Klassen. Für verschiedene Sprachen musst du dann noch andere Sprachen in deinen Fehlermeldungen unterstützen musst du bei jedem Vorkommen von Messagebox das abändern (bei allen 2-3 Dateien).
Zwar bekommt man das mit Conditional Compiling in den Griff, aber das ist definitiv keine gute Lösung. Viel schöner sind da Exceptions. Ein Sprachfeature was viel zu sehr unterschätzt wird bei Lazarus. Du hast einen Fehler->Feuerst die Exception in deiner Klasse, die Benutzerfunktion muss sich darum kümmern die zu behandeln, oder sie wird direkt bis zum User hochgereicht. Funktioniert grafisch, dann werden Messageboxen gezeigt, oder Textuell.
Hier ein link dazu. Und das beste, das ist weder Betriebsystem noch Widgetset abhängig.