Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Benamsing von Listen (https://www.delphipraxis.net/205615-benamsing-von-listen.html)

freimatz 28. Sep 2020 16:28

Benamsing von Listen
 
Wir haben z.B. einen type TBla. Dann gibt es eine TBlaList = class(TList<TBla>); - soweit so gut.

Nun möchte ich verstärkt IList<> verwenden. Ich mache also:
IBlaList = class(IList<TBla>);
TBlaList = class(TList<TBla>, IBlaList);

Nun habe ich zwei TBlaList. Die oben erste kann ich nicht einfach ändern, die ist verteilt in >1 Million Zeilen Quellcode.

Ähnlich ist der Fall mit
IStringList = class(IList<String>);
TStringList = class(TList<String>, IStringList);

Wie würdet Ihr sowas benennen?

Der schöne Günther 28. Sep 2020 16:43

AW: Benamsing von Listen
 
Ich würde vorher noch einmal innehalten und überlegen ob man wirklich ein TMeinContainer braucht und weshalb es nicht ein TContainer<TMeins> ebenso tut.

Was gewinnt man dadurch?

PS: https://de.wikipedia.org/wiki/Kompos..._von_Vererbung

freimatz 28. Sep 2020 17:10

AW: Benamsing von Listen
 
Wir gewinnen lesbareren Code. Bei uns ist es Konvention ), dass es zu jedem I* ein T* gibt. (Wobei man schon oft das T* nicht kennen muss.). Ausserdem halte ich das für DRY

himitsu 28. Sep 2020 17:19

AW: Benamsing von Listen
 
Zitat:

Wir haben z.B. einen type TBla. Dann gibt es eine TBlaList = class(TList<TBla>); - soweit so gut.

Nun möchte ich verstärkt IList<> verwenden. Ich mache also:
IBlaList = class(IList<TBla>);
Delphi-Quellcode:
TBlaList = class(TList<TBla>, IBlaList);

Das TBla ist doch überall das Selbe?
Warum dann überhaupt zwei TBlaList, anstatt das Interface direkt in die erste Deklaration?

Rollo62 28. Sep 2020 18:21

AW: Benamsing von Listen
 
Ich benutze sehr oft und gerne die Mehrzahl zur Benennung, das geht meistens sinnvoll auf.

Delphi-Quellcode:
TBla
TBlas = class(TList<TBla;

Uwe Raabe 28. Sep 2020 19:36

AW: Benamsing von Listen
 
Zitat:

Zitat von Rollo62 (Beitrag 1474466)
Ich benutze sehr oft und gerne die Mehrzahl zur Benennung, das geht meistens sinnvoll auf.

Ist halt nicht so klar, wenn es sowohl Listen als auch Arrays davon gibt.

freimatz 28. Sep 2020 19:52

AW: Benamsing von Listen
 
Zitat:

Zitat von himitsu (Beitrag 1474464)
Das TBla ist doch überall das Selbe?
Warum dann überhaupt zwei TBlaList, anstatt das Interface direkt in die erste Deklaration?

Weil dann die erste TBlaList die Referenzzählung bekommt und dann funktioniert der existierende Code nicht mehr.

Zitat:

Zitat von Uwe Raabe (Beitrag 1474474)
Zitat:

Zitat von Rollo62 (Beitrag 1474466)
Ich benutze sehr oft und gerne die Mehrzahl zur Benennung, das geht meistens sinnvoll auf.

Ist halt nicht so klar, wenn es sowohl Listen als auch Arrays davon gibt.

Ja, wir haben oft auch beides. Und dann gibt es noch Wörter die in Ein- und Mehrzahl gleich lauten (z.B. "datum").

jfheins 28. Sep 2020 20:33

AW: Benamsing von Listen
 
Zitat:

Zitat von freimatz (Beitrag 1474463)
Wir gewinnen lesbareren Code. Bei uns ist es Konvention ), dass es zu jedem I* ein T* gibt. (Wobei man schon oft das T* nicht kennen muss.). Ausserdem halte ich das für DRY

Ich würde da übrigens auch nochmal den Grad vorher lesen: https://clean-code-developer.de/die-..._Principle_ISP
Zitat:

Je weniger in dessen Interface enthalten ist, desto geringer ist die Kopplung zwischen den beiden Komponenten.
Es ist also beinahe sinnlos, wenn es zu jedem T* genau ein I* gibt. Cleaner wäre soetwas:
Delphi-Quellcode:
TDelphiPraxis = class(..., ITopicSource, ITopicSink, IUserRepository);
=> Der Nutzer gibt das Interface vor, und es enthält genau so viel, wie der Nutzer braucht.

freimatz 28. Sep 2020 22:10

AW: Benamsing von Listen
 
Das gilt nur für etwas größere Klassen. okok, auch wir haben solche und wir versuchen da auch mehrere Interfaces zu machen. In der Regel sind die Klassen recht klein und implementieren nur ein interface. Was will man denn noch aufteilen wenn das interface nur eine Methode hat?
Und ganz sicher hat es keinen Sinn wenn nun die TBlaList das IBlaList basierend auf IList implementiert, wenn ich diese IList noch aufteile. Die IList stammt übrigens von Spring4D. Aber ich denke das tut alles nichts zur Sache mit dem Namensproblem.
Trotzdem Danke für alle Antworten.

himitsu 28. Sep 2020 22:50

AW: Benamsing von Listen
 
Nicht direkt.

Wenn man es als Objekt (TBlaList) erstellt, dann ist nach dem Create das RefCount = 0
und die Freigabe geschieht später im aufgerufenen Free/Destroy.

Beim Create, welches direkt an eine Interface-Variable geht, steht RefCount auf 1.


Einziges Problem was es geben könnte, wenn jemand auf die Idee kommt und Objekt-Referenzen mit Interface-Referenzen vermischt,
aber sowas macht ja niemand. :stupid:


Alle Zeitangaben in WEZ +1. Es ist jetzt 03:57 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