AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

globale Unit mit Konstanten o.ä. sinnvoll?

Ein Thema von Jumpy · begonnen am 2. Feb 2012 · letzter Beitrag vom 2. Feb 2012
Antwort Antwort
Seite 1 von 2  1 2   
Jumpy

Registriert seit: 9. Dez 2010
Ort: Mönchengladbach
1.717 Beiträge
 
Delphi 6 Enterprise
 
#1

globale Unit mit Konstanten o.ä. sinnvoll?

  Alt 2. Feb 2012, 10:44
Hallo,

ich hab vor kurzem mal mit einer Unit (von den Jedis?) gearbeitet, wo im Prinzip die TAPI gekapselt und u.a. jede Menge Konstanten definiert wurden. Die hab ich in mehreren Units in der Uses-Klausel eingebunden, in denen ich die TAPI eigentlich nicht gebraucht habe, aber die Konstanten.

Nun habe ich wieder ein Projekt, wo viele konstante Steuerparameter an mehreren Stellen gebraucht werden. Ich hatte nun die Idee eine Unit nur für diese Konstanten zu mißbrauchen und die überall zu referenzieren. Sollte sich somit an den Konstanten mal was ändern, brauch ich das nur an einer Stelle zu tun. (Wobei sich eigentl. nichts ändern sollte, sonst würde es keinen Sinn machen das hard zu coden, aber alleine schon während der Entwicklung scheint es mir sinnvoll, wo nach und nach Konstanten dazukommen und die dann nicht in mehreren Units neu erstellt werden müssen).

Kann man das somit sinnvoller Weise so machen oder gibt es da andere BestPractices?
Kann man in dieser Unit auch allgemeine Hilfsfunktionen, die in dem Projekt öfter mal gebraucht werden, ablegen (ähnl. wie z.B. die Funktionen in der Unit Math)?
Ralph
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
40.504 Beiträge
 
Delphi 11 Alexandria
 
#2

AW: globale Unit mit Konstanten o.ä. sinnvoll?

  Alt 2. Feb 2012, 12:05
Zum Thema globale Unit für Konstanten ... siehe Units SysConst und RTLConsts ... also warum nicht


Wobei es in D6 wohl noch nicht geht,
aber ich kapsle immer öfters Konstanten direkt in die Klassen, zu denen sie gehören.
Delphi-Quellcode:
type
  TMyClass = class
    private type
      TMySubType = Integer;
      ...
    public type
      TMyOtherSubType = Cardinal;
      ...
    protected const
      cEineKonstante = 129;
      ...
    public const
      cAndereKonstante = 'abx';
      ...
    private class var
      FLock: TCriticalSection;
      ...
    private
      FField: Integer;
      ...
    protected
      ...
    public
      ...
    published
      ...
  end;
So hat man alles schön zusammen.

Und aufgerufen wird's z.B. so TMyClass.cEineKonstante.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list

Geändert von himitsu ( 2. Feb 2012 um 13:39 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.103 Beiträge
 
Delphi 10.4 Sydney
 
#3

AW: globale Unit mit Konstanten o.ä. sinnvoll?

  Alt 2. Feb 2012, 12:10
Es ist sinnvoller etwas was konstant ist nur an einer stelle zu definieren.
Einige probleme bei C/C++ rühren z.B. daher das viele Biliotheken (früher mal?) ihre eigene TRUE und FALSE-Konstanten entsprechend (unterschiedlich) definieren
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
r2c2

Registriert seit: 9. Mai 2005
Ort: Nordbaden
925 Beiträge
 
#4

AW: globale Unit mit Konstanten o.ä. sinnvoll?

  Alt 2. Feb 2012, 12:11
Eigentlich ist das nicht schön. Insbesondere ist das nicht OOP. Die OO sagt: "gruppiere nach Semantik, nicht nach Syntax", d.h. Konstanten zum Thema XY sollten in ne Unit XY (zusammen mit Funktionen, Klassen, etc. zum gleichen Thema) und nicht mit Konstanten zum Thema Z vermischt werden.

Leider sind solche Units eine weit verbreitete Unsitte.

Der Grund warum, das Gruppieren nach Syntax schlecht ist ist folgender: Wenn du irgendwas aus der Unit wiederverwenden willst, musst du entweder die benötigten Teile "rausoperieren" (was fehleranfällig und lästig ist) oder du musst ungenutzte Konstanten mitschleppen, was der Übersichtlichkeit abträglich ist. Außerdem erzeugst du eine unnötige Kopplung an die Datei. Siehe mein Vortrag von den letzten Delphi-Tagen: http://www.christian-rehn.de/2011/09...sie-vermeiden/

mfg

Christian
Kaum macht man's richtig, schon klappts!
  Mit Zitat antworten Zitat
Benutzerbild von p80286
p80286

Registriert seit: 28. Apr 2008
Ort: Stolberg (Rhl)
6.659 Beiträge
 
FreePascal / Lazarus
 
#5

AW: globale Unit mit Konstanten o.ä. sinnvoll?

  Alt 2. Feb 2012, 14:02
Entschuldige Christian,

aber nichts anderes habe ich aus den vorhergehenden Beiträgen entnommen.
Konstanten (und/oder ..), die zu einem Thema gehören, werden in einer (Themen-Zentral-Unit) zusammengefasst.

Gruß
K-H
Programme gehorchen nicht Deinen Absichten sondern Deinen Anweisungen
R.E.D retired error detector
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.103 Beiträge
 
Delphi 10.4 Sydney
 
#6

AW: globale Unit mit Konstanten o.ä. sinnvoll?

  Alt 2. Feb 2012, 14:09
Eigentlich ist das nicht schön. Insbesondere ist das nicht OOP. Die OO sagt: "gruppiere nach Semantik, nicht nach Syntax", d.h. Konstanten zum Thema XY sollten in ne Unit XY (zusammen mit Funktionen, Klassen, etc. zum gleichen Thema) und nicht mit Konstanten zum Thema Z vermischt werden.

Leider sind solche Units eine weit verbreitete Unsitte.
Steht irgendwo das man nur eine Unit mit Konstanten haben darf? Natürlich sollte man diese auch noch nach Semantik gruppiert ablegen. Und dann auch noch Klassen soweit sie sinnvoll unabhängig voneinander arbeiten können auch entsprechend trennen.
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
r2c2

Registriert seit: 9. Mai 2005
Ort: Nordbaden
925 Beiträge
 
#7

AW: globale Unit mit Konstanten o.ä. sinnvoll?

  Alt 2. Feb 2012, 14:10
aber nichts anderes habe ich aus den vorhergehenden Beiträgen entnommen.
Konstanten (und/oder ..), die zu einem Thema gehören, werden in einer (Themen-Zentral-Unit) zusammengefasst.
und zwar zusammen mit den Funktionen, Klassen, etc. und nicht getrennt davon. So gruppiert, wie man sie wiederverwenden würde. Himitsu hat ein schönes Beispiel geliefert... nachträglich in seinen Post oben reineditiert. Als ich gepostet hatte, stand das noch nicht drin. Ich wollte das nur klar machen. Zu der Zeit als ich gepostet hatte, war das noch nicht so klar in diesem Thread. Und TypeDefs.pas und Consts.pas sind leider weit verbreitet.

Ich sehe also nicht, wo wir uns widersprechen.

mfg

Christian
Kaum macht man's richtig, schon klappts!
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.103 Beiträge
 
Delphi 10.4 Sydney
 
#8

AW: globale Unit mit Konstanten o.ä. sinnvoll?

  Alt 2. Feb 2012, 15:09
und zwar zusammen mit den Funktionen, Klassen, etc. und nicht getrennt davon.
Doch getrennt. Hatte schon öfters denn Fall das ich zwar die Konstanten benötigt habe (Für Supporttools die nur einfache Checks durchführen) aber nicht die entsprechenden Klassen.
Hätte ich alles in einer Unit wäre mein einfaches Support-Tool mehrere MB größer und würde einige andere DLL's zur laufzeit benötigen da diese (für diese Anwendungszweck) unnötigen Abhängigkeiten in die Exe kompiliert werden.
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
40.504 Beiträge
 
Delphi 11 Alexandria
 
#9

AW: globale Unit mit Konstanten o.ä. sinnvoll?

  Alt 2. Feb 2012, 15:17
Wenn die Klassen nicht verwendet werden, dann wird ihr Code auch nicht in die EXE/DLL/BPL einkompiliert.

Es macht diesbezüglich also keinen Unterschied, ob die Klassen in der Unit liegen oder nicht.

OK, man sollte nicht, so wie in SysUtils oder Classes alles in Initialization initialisieren, denn dann wird es dennoch eingebunden, da es ja in Initialization verwendet wird.
Dafür gibt es seit einer Weile das class constructor Create; , welches nur eingebunden und wie das Initialization aufgerufen wird, wenn die Klasse wirklich verwendet wurde.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.103 Beiträge
 
Delphi 10.4 Sydney
 
#10

AW: globale Unit mit Konstanten o.ä. sinnvoll?

  Alt 2. Feb 2012, 15:36
Wenn die Klassen nicht verwendet werden, dann wird ihr Code auch nicht in die EXE/DLL/BPL einkompiliert.

Es macht diesbezüglich also keinen Unterschied, ob die Klassen in der Unit liegen oder nicht.
Die entsprechenden Units haben initialization/finalization-Code + Feste einbindung von DLL's + Ressourcenabschnitte.

OK, man sollte nicht, so wie in SysUtils oder Classes alles in Initialization initialisieren, denn dann wird es dennoch eingebunden, da es ja in Initialization verwendet wird.
Und wenn du entsprechen anzahl von Elementen hast die zu 99% bei normalen Apps benötigt werden und zu 100% bei VCl-Form-Apps? Dann jedesmal dem Entwicker nahe legen noch x Initialization-Funktion aufzurufen? Ok, es gibt mittlerweile genügen Pattern wie man sowas besser macht, aber wieviel Stunden würde das benötigen um einen XE2-Code um solche seit Delphi 1/2 vorhandenen Codeteile fehlerfrei umzustellen. Application.Initialize und Application.MainFormVisible (?) haben schon für genügend Threads hier im Forum geführt.
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2   

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 08:28 Uhr.
Powered by vBulletin® Copyright ©2000 - 2022, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2021 by Daniel R. Wolf