Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Grundsatz Frage: Units sauber halten oder mit uses vollstopfen? (https://www.delphipraxis.net/194138-grundsatz-frage-units-sauber-halten-oder-mit-uses-vollstopfen.html)

Glados 20. Okt 2017 21:59


Grundsatz Frage: Units sauber halten oder mit uses vollstopfen?
 
Ich stelle mir gerade eine grundsätzliche Frage.

Ich räume seit mehreren Monaten ein größeres Projekt auf und lagere wild rumliegenden Code in Units aus.
Units habe ich mittlerweile einige. Ein paar projektgebundene, ein Paar die man auch woanders nutzen könnte.

Daher die Grundsatzfrage: sollte man Units sauber halten und keinerlei andere Units einbinden oder ist das egal?

Beispiel: ich habe eine Unit Utils.Files.pas und eine andere namens Utils.FileCompare.pas
In Utils.Files.pas ist eine Funktion GetFileSize. Selbe Funktion brauche ich in Utils.FileCompare. Statt aber Utils.Files.pas in die uses von Utils.FileCompare.pas aufzunehmen, habe
ich GetFileSize einfach kopiert und eingefügt. Meine uses-Klausel ist somit leer.

Wie macht ihr das?

nahpets 20. Okt 2017 23:18

AW: Grundsatz Frage: Units sauber halten oder mit uses vollstopfen?
 
Formuliere es mal etwas flapsig und provokant:

Uses ist dazu da, dass man es benutzt.

Der Sinn von Units ist es doch, Quelltext einmalig zu schreiben und mehrfach zu nutzen.

Wenn Du den Quelltext kopierst, muss Du Dir auch merken, wo Du so Deine Kopieen hingepackt hast, denn wenn mal ein Fehler auftaucht oder eine Ergänzung erforderlich ist, musst Du auch entsprechend oft korrigieren bzw. ergänzen.

scrat1979 20. Okt 2017 23:26

AW: Grundsatz Frage: Units sauber halten oder mit uses vollstopfen?
 
Zitat:

Zitat von nahpets (Beitrag 1383816)
Formuliere es mal etwas flapsig und provokant:

Uses ist dazu da, dass man es benutzt.

Der Sinn von Units ist es doch, Quelltext einmalig zu schreiben und mehrfach zu nutzen.

Wenn Du den Quelltext kopierst, muss Du Dir auch merken, wo Du so Deine Kopieen hingepackt hast, denn wenn mal ein Fehler auftaucht oder eine Ergänzung erforderlich ist, musst Du auch entsprechend oft korrigieren bzw. ergänzen.

Sehe ich genau so. Ich bevorzuge auch die „Unit-Version“. Eine Änderung ist dann nur an einer Stelle im Code notwendig. Eigentlich ja auch der Sinn der units:)

Gegebenenfalls mache ich mir für verschiedene Projekte jeweils eine „unit“ welche alle benötigten anderen Units referenziert. Damit spare ich mir viele units im Hauptprogramm.

Glados 20. Okt 2017 23:28

AW: Grundsatz Frage: Units sauber halten oder mit uses vollstopfen?
 
Nur wie handhabt man das dann, wenn man eine Unit in einem anderen Projekt braucht, die wieder zwei oder drei andere referenziert die man ggf. nicht benötigt?

Zacherl 21. Okt 2017 01:18

AW: Grundsatz Frage: Units sauber halten oder mit uses vollstopfen?
 
Zitat:

Zitat von Glados (Beitrag 1383818)
Nur wie handhabt man das dann, wenn man eine Unit in einem anderen Projekt braucht, die wieder zwei oder drei andere referenziert die man ggf. nicht benötigt?

Ist im Grunde nicht allzu tragisch. Kann zwar deine Dateigröße dank RTTI ein wenig vergrößern, aber nicht verwendeter Code wird selbst vom Delphi-Linker in der Regel nicht mit in das Kompilat aufgenommen.

nahpets 21. Okt 2017 01:21

AW: Grundsatz Frage: Units sauber halten oder mit uses vollstopfen?
 
Eine Unit enthält in einem Uses nur das, was sie benötigt.

Sie kann von daher nichts benötigen, das im einbindenden Projekt nicht benötigt wird.

Die Frage ist also:

Muss man Units zwingend so bauen, dass man dann, wenn man sie in ein Projekt einbindet auch alles, was sie enthält benützt.

Nein muss man nicht.

Der Linker ist (soweit ich weiß) schlau genug, nur das in das entgültige Programm zu übernehmen, was tatsächlich benötigt wird.

Man muss also keine Angst haben, durch die Nutzung großer Units, die wiederum viele weitere Units nutzen, ein Programm endlos aufzublähen.

Im Programm ist letztlich nur das tatsächlich genutzte.

Units halt nach fachlichen (oder sonstigen eigenen, der Übersicht dienlichen) Kriterien erstellen und benützen.

Wenn man immer sicherstellen will, dass eine Unit nichts enthält, was man im Programm nicht benötigt, müsste man (vermutlich) pro Funktion, pro Prozedur, pro Klasse immer eine Unit erstellen.

Das erscheint mir nicht im Sinne des Erfinders zu sein.

Erstell' doch mal ein Programm mit MAP-Datei (ist letztlich nur Text). Und dann schau da mal rein, was dort aufgeführt wird. Das ist letztlich alles, was im Programm genutzt wird.
Prüf' dann mal für das Programm, ob aus allen direkt oder indirekt per Uses eingebundenen Units alles in der MAP-Datei zu finden ist oder nur das, was Deiner Meinung nach genutzt werden müsste.

Bernhard Geyer 21. Okt 2017 09:34

AW: Grundsatz Frage: Units sauber halten oder mit uses vollstopfen?
 
Zitat:

Zitat von Glados (Beitrag 1383815)
..., habe ich GetFileSize einfach kopiert ...

Dieses Vorgehen ist als Copy&Paste-Antipattern bekannt.
Als mach es nicht!

Neumann 21. Okt 2017 10:03

AW: Grundsatz Frage: Units sauber halten oder mit uses vollstopfen?
 
Hallo Bernhard, den verlinkten Artikel sollte jeder mal lesen, der sich mit Programmieren beschäftigt.
Es gibt auch einige Bücher, die die Sache vertiefen; aber hier hat man eine gute Zusammenfassung und kommt schnell drauf was man selber für Probleme hat oder produziert.

Bernhard Geyer 21. Okt 2017 10:40

AW: Grundsatz Frage: Units sauber halten oder mit uses vollstopfen?
 
Zitat:

Zitat von Neumann (Beitrag 1383824)
Hallo Bernhard, den verlinkten Artikel sollte jeder mal lesen, der sich mit Programmieren beschäftigt.
Es gibt auch einige Bücher, die die Sache vertiefen; aber hier hat man eine gute Zusammenfassung und kommt schnell drauf was man selber für Probleme hat oder produziert.

Ich finde das man die Anti-Pattern bald noch früher kennen sollte als Pattern. Sie sind oft auch viel Anschaulicher zu vermitteln als manche Pattern bei denen sich der Nutzen manchmal nicht sofort erschließt.

Glados 21. Okt 2017 11:32

AW: Grundsatz Frage: Units sauber halten oder mit uses vollstopfen?
 
Zitat:

Dieses Vorgehen ist als Copy&Paste-Antipattern bekannt.
Als mach es nicht!
Das heißt man sollte in die uses von Unit1 dann doch besser Unit2 aufnehmen, auch wenn man Unit2.FunktionA in Unit1 nur ein- oder zweimal benötigt statt Copy&Paste?

nahpets 21. Okt 2017 12:01

AW: Grundsatz Frage: Units sauber halten oder mit uses vollstopfen?
 
ja

Unit2 könntest Du später ja auch noch in diversen anderen Projekten benötigen.

Dann hast Du einen bestimmten Quelltext nur exakt einmal und wenn Du mal 'nen Fehler findest (oder Ergänzungen vornehmen musst), brauchst Du ihn nur einmal korrigieren.

Alles, was die entsprechende Unit nutzt, neu kompilieren und gut ist.

Alles andere wird, früher oder später, unübersichtlich und es können sich Unterschiede einschleichen, die man nicht erwartet, weil man ja meint, man hätte überallhin den gleichen Quelltext kopiert.

Harry Stahl 21. Okt 2017 12:15

AW: Grundsatz Frage: Units sauber halten oder mit uses vollstopfen?
 
Ja, grundsätzlich schon. Wenn Du unit B aber nicht immer aufgenommen haben willst (weil diese z.B. einen Initialisierungsteil hat, der Speicher braucht), kannst Du die eine Funktion auch als Include-Datei in beide Units einbinden. Dann existiert die Funktion immer nur als eine Fassung, aber Du brauchst nicht UnitB aufzunehmen. Dass die Funktion dann für den Compiler evtl. 2 mal sichtbar ist, wenn Du doch mal beide Units aufnimmst, macht dann nichts, denn bei doppelten Definitionen wird immer nur die zuletzt gefundene Version genommen (die ja aber gleich ist, da immer nur einmal vorhanden).

Uwe Raabe 21. Okt 2017 12:47

AW: Grundsatz Frage: Units sauber halten oder mit uses vollstopfen?
 
Zitat:

Zitat von Harry Stahl (Beitrag 1383832)
Ja, grundsätzlich schon. Wenn Du unit B aber nicht immer aufgenommen haben willst (weil diese z.B. einen Initialisierungsteil hat, der Speicher braucht), kannst Du die eine Funktion auch als Include-Datei in beide Units einbinden.

Dann würde ich die betreffende Funktion lieber in eine separate Unit auslagern, die dann bei Bedarf von beiden Units verwendet wird. Viele IDE-Tools und auch die IDE selbst reagieren manchmal etwas zickig bei Includes.

hoika 21. Okt 2017 19:42

AW: Grundsatz Frage: Units sauber halten oder mit uses vollstopfen?
 
Hallo,

Copy&Paste Unit 1 nach Unit 2

In einer Methode von Unit 2 findest Du einen Fehler.
Änderst Du jetzt auch in Unit 1 oder vergisst Du es???


Alle Zeitangaben in WEZ +1. Es ist jetzt 14:39 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz