![]() |
AW: Uses: Interface vs. Implementation Section
Eins vorneweg: Ich verwende den Uses-Clause Manager (Shift-Alt-U) von GExperts! Damit habe ich keine Ausrede mehr, es sei zu anstrengend, die Uses-Abschnitte aufzuräumen.
Zitat:
Zitat:
Zitat:
Zitat:
Zitat:
Zitat:
Zitat:
Zitat:
Ihr immer mit euren zirkulären Referenzen: Wenn ihr davor Angst habt, dann lernt doch einfach, eure Units so zu bauen, das das nicht passiert. Ich mach mir doch meinen Code nicht unleserlich ('alles an einer Stelle') nur weil ich keinen Plan habe, wie ich zirkuläre Referenzen vermeiden kann. |
AW: Uses: Interface vs. Implementation Section
Zitat:
Zitat:
Zitat:
Zitat:
Achja: Ich habe das auch mal so gemacht, mit dem Verteilen der Units und hatte mir irgendwann mal eine zirkuläre Referenz eingefangen. Gruß |
AW: Uses: Interface vs. Implementation Section
Wenn du die Variablen ansprichts ... dann hätte ich gern eine lokale Usesklausel, denn es kommt oftmals vor, daß ich eine Unit nur innerhalb einer einer bestimmten Methode benötige.
Nja, im Prinzip ist erstmal eine Glaubensfrage, wie als ob man begin, BEGIN, Begin oder begIN schreiben möchte. Für den Kompiler gibt es allerdings nur Nachteile, egal was man macht. > gibt es nur die Interfaceklausel, dann hat er weniger Arbeit [edit] ups, ich meinte ja die Nachteile > gibt es nocheine Klausel in der Implementation, dann hat er mehr Arbeit Wobei es auch so schon nicht leicht ist, da er eigentlich versucht Units in der Reihenfolge einzubinden, wie man es dort angegeben hat, was ja leider nicht immer klappt. Aber wenn man niemals Initializations- und Finalizations-Abschnitte verwendet, dann hab man keine Probleme zu befürchten, wenn die genutzten Units in der Implementation stehen. |
AW: Uses: Interface vs. Implementation Section
Vielleicht kommt ein Teil der Meinungspolemik in diesem Thread auch von der unterschiedlichen Herangehensweise bzw. Nutzung von Delphi?
Beim RAD-Ansatz übernimmt ja Delphi quasi die Verwaltung der Units und packt sie alternativlos und korrekt in den Interface-Bereich. Sobald ich jedoch eigene Klassen oder Forms/Frames ohne RAD einsetze, bin ich allein der "Bauherr" meiner Units und der Verwalter von deren Referenzen. Und Furtbichler könnte sich z.B. auch auf N.Hodge berufen, der ![]() ![]() Hier kommen dann auch schon Entwicklungs-Prinzipien und -Methoden (Law of Demeter, Testable Code, Clean Code) in's Spiel, die etwas über den bloßen Wunsch hinaus gehen, immer alles im Blick haben zu wollen. |
AW: Uses: Interface vs. Implementation Section
Zitat:
|
AW: Uses: Interface vs. Implementation Section
Zitat:
Zitat:
|
AW: Uses: Interface vs. Implementation Section
Zitat:
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs; wird bei einem neuen Formular nur "Forms" im Interface Teil benötigt. Erst durch andere Komponenenten werden die anderen ggf. verwendet. Unr nur weil einige Tools dies unterstuetzen, ist es noch lange kein Grund, dass dies "richtig" ist. Der Rest hat sich Angos schon geäußert. |
AW: Uses: Interface vs. Implementation Section
Zitat:
Alles, was im Interface-Teil deklariert und referenziert wird, benötigt die Klasse, um mit dem Rest-Programm arbeiten zu können. Demgegenüber wird das, was lediglich im Implementations-Teil deklariert und referenziert wird, lediglich im Innern der Klasse benötigt. So gesehen ist die Uses-Klausel auch eine Beschreibung der Wirkzusammenhänge der Klasse und wenn auf einmal Units im Interface benötigt werden, kann das schon ein Indiz für einen Fehler in der Klassen-Architektur sein. Da hat man dann etwas nicht "richtig" gemacht. |
AW: Uses: Interface vs. Implementation Section
Liste der Anhänge anzeigen (Anzahl: 2)
Zitat:
Dieser Wizard ist für mich eines der wenigen Tools, die ich von CnPack in der IDE aktiviert habe. |
AW: Uses: Interface vs. Implementation Section
Ich möchte den Punkt der Übersichtlichkeit nochmal aufgreifen.
Bisher geht ihr alle davon aus, dass ihr/eure Firma/euer Entwicklerteam die einzigen seid, die das Projekt kompilieren. Und das beim Build sowieso alle Abhängigkeiten bereits erfüllt sind. Aber angenommen ich entwickle Open Source und binde noch ein paar externe Units mit ein, die nicht zum Projekt gehören. Nun möchte jemand anders den Code auch auf seinem Zielsystem kompilieren, und schaut zunächst in die Units, welche Dependencies er braucht. Dann ist es doch viel einfacher und schneller, einfach oben im interface-Abschnitt zu schauen, gerade weil diese Klausel direkt sehr weit oben im Code ist. Man bedenke, dass der interface-Abschnitt gerne mal >200 Zeilen lang werden kann, und dementsprechend die implementation-uses-Klausel irgendwo mitten im Code liegt (erstmal finden!) Und jetzt kommt mir bitte keiner mit: "Ausprobieren und den Compiler in den Fehler laufen lassen, dann wird man schon sehen, was er nicht findet" - denn das ist jawohl die unsauberste Methode überhaupt. Das würde dem gleichen Prinzip folgen wie:
Delphi-Quellcode:
Einfach drauflos ballern und vom Fehlerfall ausgehen.
function Nonzero(const i: integer): boolean;
var x: extended; begin try x := 1/i; Result := true; except Result := false end end; P.S.: Gut, zugegeben, die Dependencies sollten eigentlich auch mit in die Dokumentation, aber hasst es nicht jeder Programmierer, Dokumentationen zu schreiben? :stupid: |
Alle Zeitangaben in WEZ +1. Es ist jetzt 07:27 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