![]() |
AW: Unit-Design - was bevorzugt ihr?
Zitat:
|
AW: Unit-Design - was bevorzugt ihr?
Zitat:
Zitat:
|
AW: Unit-Design - was bevorzugt ihr?
Zitat:
Delphi-Quellcode:
wird den Methoden ein versteckter
static
Delphi-Quellcode:
Parameter übergeben, welcher die aktuelle Objektinszanz beinhaltet (bzw. einen Zeiger auf die TClass, sofern es sich um eine Class-Method handelt). Das ist natürlich relativ witzlos, wenn man den
Self
Delphi-Quellcode:
eh nur als Namespace benutzt und nichtmal instanziiert.
record
|
AW: Unit-Design - was bevorzugt ihr?
Im Beispiel #1 haben die Methoden doch static :P
Delphi-Quellcode:
type
TTestUnit = record private public class procedure TestProzedur(const AParam: string); static; end; |
AW: Unit-Design - was bevorzugt ihr?
Ist Euch eigentlich aufgefallen, das Ihr nicht über "Unit-Design" sondern über die Anwendung von Records contra Classes diskutiert?
Beides hat seine Berechtigung und ich setze jeweils das ein was mir besser in den Kram passt. Und das schließt eine spätere Änderung nicht aus. Da gibt es kein entweder oder. (und ich habe noch jede Menge Units, die einfach nur Funktionssammlungen sind. Solange die vernünftig arbeiten, werde ich da nichts ändern. Gruß K-H |
AW: Unit-Design - was bevorzugt ihr?
Ich lege alles in Klassen. Dort benutze ich dann aber auch noch Records zur weiteren Strukturierung. Zum Beispiel gibt es dann nicht (als fiktive Beispiele):
Delphi-Quellcode:
sondern:
StrToPerson
TryStrToPerson HashMD5Salted usw.
Delphi-Quellcode:
Auf die Weise findet man finde ich sehr viel schneller was man sucht, weil man nicht eine hingeworfene Anzahl an Funktionen hat, sondern eine saubere Struktur, durch die man per Syntaxergänzung schnell durch ist.
TStringTools.StrTo.Person
TStringTools.TryStrTo.Person TStringTools.Hash.MD5Salted usw. Einen größeren Unterschied macht die Sache auch bei der Umbenennung einer Unit. Schreibt man den Unitnamen immer vor eine lose Funktion, muss man diesen unterhalb von implementation an x Stellen anpassen. Schreibt man dort nur den Klassennamen hin, beschränkt sich die Änderung jeweils auf die uses Klausel. Schreibt man den Unitnamen aber nicht hin bei losen Funktionen, weiß man nicht woher die Funktionen stammten... Die beiden großen Vorteile sehe ich, wenn man nicht lose Funktionen nutzt. |
AW: Unit-Design - was bevorzugt ihr?
Zitat:
Zitat:
Aber ernsthaft gefragt, schleppe ich nicht irgendwelchen Overhead mit, wenn ich irgendwelche Allerweltsfunktionen in eine Klasse packe? War da nicht mal was wie, nur was gebraucht wird, wird auch kompiliert? Gruß K-H |
AW: Unit-Design - was bevorzugt ihr?
Zitat:
|
AW: Unit-Design - was bevorzugt ihr?
Kompiliert wird immer alles.
Was am Ende ins Programm gelinkt wird, ist eine andere Sache. Editor -> PreCompiler (LLVM bei den neueren Compilern) -> Compiler -> Linker -> AfterBuildZeugs Auch bei Klassen/Records können Felder/Methoden weggelassen werden, oder gar die ganze Klasse (außer man ist so intelligent und bindet z.B. in Initialization eine Initprozedur ein, anstatt den Class-Constructor zu nutzen) Natürlich ist genau definiert wann welche Mehtode verwendet wird, wenn es mehrere gleichnahmige gibt, aber das muß nicht immer mit dem übereinstimmen, was man grade glaubt zu wissen, falls man z.B. diese andere IntToStr/StrToInt nicht kennt oder grade im Kopf hat. |
AW: Unit-Design - was bevorzugt ihr?
Zitat:
Das haben wir dann neu strukturiert, so dass aus string_tools.pas zuerst StringUtils.pas und nun Common.Utils.StringTools.pas wurde (natürlich auch im Verzeichnis common/utils). Neue Unit landen gleich in dieser geordneten Struktur. Insofern wurden bei uns eher die alten Unit umbenannt. Aber das ist natürlich bei jedem anders, das sollte kein Widerspruch sein. ;-) |
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:00 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