Common steht hier wohl vermutlich dafür, dass die
Unit nur in diesem einen Project verwendet wird.
Wir haben diese Struktur:
Projekt.Kategorie.(Untergruppe.)Unitname.pas
bzw. für Interfaces:
Projekt.Interfaces.Kategorie.(Untergruppe.)Unitnam e.pas
Auf die Weise werden die Namen nicht zu lang, sind aber dennoch eindeutig. Projekte sind bei uns so etwas wie Server, Frontend, Backend usw. sowie bei gemeinsamen Units Common. Kategorien sind z.B. Network, Encryption, Hardware, ...
Untergruppen sind optional und kaum benutzt (die Unitnamen werden damit halt schon recht lang).
Die
Unit heißt immer genauso wie das Interface oder die Klasse, die sich darin hauptsächlich befindet. Es sollte auch nichts zusätzlich drin sein, das nicht direkt dazu gehört.
Und jeder Punkt ist auf der Festplatte ein Pfadtrennzeichen, sprich es liegen auch nicht so viele Units in einem Verzeichnis, man findet die Units aber dennoch leicht und für Skriptzugriffe auch automatisiert.
Beispiel:
IPrinter wäre in Common.Interfaces.Hardware.Printer.pas definiert, TEpsonPrinter z.B. in Common.Hardware.EpsonPrinter.pas.
Mit Tools wie den CnWizards, die die Syntaxergänzung erweitern, so dass die Printer-
Unit auch mit der Eingabe "ComIntHarPri" (kleingeschrieben, nur zur Verdeutlichung) gefunden wird, sind natürlich sehr hilfreich um weniger tippen zu müssen.
Sehe ich das richtig, dass in erste
Unit der Log-Code ansich kommt und in letzte zum Beispiel Records, Classes, Enums?
Aktuell habe ich es so, dass ich alle meine Enums in einer einzigen
Unit drin habe.
Wir machen das aus mehreren Gründen nicht so.
Der wichtigste ist, dass man so Funktionalität auf mehrere Units verteilt und so bei Änderungen an größeren Units etwas ändert, an denen dann öfter Änderungen für verschiedene Teile der Anwendungen passieren. Das macht es nicht einfacher Änderungen nachzuverfolgen und zu mergen.
Gemeinsam genutzte Typen wie TColor in System.UITypes deklarieren wir natürlich auch zentral.
Dazu kommt, dass man nicht nur die
Unit in die uses kleben muss, die die Funktionalität enthält, sondern zusätzlich noch z.B. eine für Enums usw.
Sind die Typdefinitionen direkt in der
Unit mit dem Interface, sind diese bereits direkt bekannt. Man muss also nicht erst suchen wo der Rest definiert ist. Das macht die Verwendung deutlich einfacher.