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:
StrToPerson
TryStrToPerson
HashMD5Salted
usw.
sondern:
Delphi-Quellcode:
TStringTools.StrTo.Person
TStringTools.TryStrTo.Person
TStringTools.Hash.MD5Salted
usw.
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.
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.