AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Programmierdogmata

Ein Thema von Delphi-Laie · begonnen am 7. Apr 2013 · letzter Beitrag vom 8. Apr 2013
Antwort Antwort
Elvis

Registriert seit: 25. Nov 2005
Ort: München
1.909 Beiträge
 
Delphi 2010 Professional
 
#1

AW: Programmierdogmata

  Alt 8. Apr 2013, 12:12
Warum? Nur weil Borlemba da schlampt und kein echtes Singleton (Application) davon macht?
Singletons sind fast globale Variablen.
Haben ja auch fast alle Probleme, die generell mit globalem State auftauchen. Eine Ausnahme, die mir gerade in den Sinn kommt, wären immutable Objekte. Da sollte es keine Probleme mit Threads und anderen Nebenläufigkeiten geben. Aber auch die können per DI oder schlicht als Parameter durchgeschliffen werden.
Robert Giesecke
I’m a great believer in “Occam’s Razor,” the principle which says:
“If you say something complicated, I’ll slit your throat.”
  Mit Zitat antworten Zitat
Benutzerbild von SubData
SubData

Registriert seit: 14. Sep 2004
Ort: Stuhr
1.078 Beiträge
 
Delphi 11 Alexandria
 
#2

AW: Programmierdogmata

  Alt 8. Apr 2013, 12:25
Ich sehe trotzdem kein Problem darin eine globale Thread-Variable anzulegen, die ggf. nötige Referenzen auf Sessions
oder das Eltern-Thread-Objekt beinhaltet. Ob da nun eine Klasse, eine Referenz, ein Record oder sonstwas hinter
steckt ist in dem Fall erstmal egal. Das ist in meinen Augen eine saubere Lösung und sie ermöglicht es an jeder Stelle
im Thread darauf zuzugreifen, ohne, dass ich sie in jeder Klasse durchschleifen bzw. sichtbar machen muss.
Ronny
/(bb|[^b]{2})/
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#3

AW: Programmierdogmata

  Alt 8. Apr 2013, 12:28
Warum? Nur weil Borlemba da schlampt und kein echtes Singleton (Application) davon macht?
Singletons sind fast globale Variablen.
Haben ja auch fast alle Probleme, die generell mit globalem State auftauchen. Eine Ausnahme, die mir gerade in den Sinn kommt, wären immutable Objekte. Da sollte es keine Probleme mit Threads und anderen Nebenläufigkeiten geben. Aber auch die können per DI oder schlicht als Parameter durchgeschliffen werden.
Eben nur fast ...

Das Böse an globalen Variablen ist doch, dass diese eingesetzt werden, wo es sich absolut nicht um etwas Globales handelt und durch die Verwendung bekomme ich Abhängigkeiten die die Wiederverwendbarkeit nicht zulässt.

Wie schon festgestellt wurde, gibt es aber durchaus die Anforderung nach einer einzigen globalen Instanz, die naturbedingt auch nur einmal pro Anwendung vorkommen kann (Application, Screen, etc.).

Nimmt man hier aber jetzt eine globale Variable, so kann diese Variable auch übereschrieben werden, ohne dass die abhängigen Teile darüber informiert werden.

Gerade im Thread-Umfeld muss auch bedacht werden, dass eine globale Variable eben nicht threadsafe ist. Somit ist das in so einem Umfeld der vorgeplante Schuss ins Knie.
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
Benutzerbild von SubData
SubData

Registriert seit: 14. Sep 2004
Ort: Stuhr
1.078 Beiträge
 
Delphi 11 Alexandria
 
#4

AW: Programmierdogmata

  Alt 8. Apr 2013, 12:45

[...]

Wie schon festgestellt wurde, gibt es aber durchaus die Anforderung nach einer einzigen globalen Instanz, die naturbedingt auch nur einmal pro Anwendung vorkommen kann (Application, Screen, etc.).

Nimmt man hier aber jetzt eine globale Variable, so kann diese Variable auch übereschrieben werden, ohne dass die abhängigen Teile darüber informiert werden.

[...]
Man kann theoretisch jeden Mist programmieren, man kann auch Konstanten überschreiben.
Aber wenn ein Entwickler auf die Idee kommt eine globale Variable wie Application zu überschreiben,
dann gehört er gehörig gesteinigt und daran ist nicht die globale Variable schuld.

Gerade Application sehe ich aber eher als gute globale Variable. Wie gesagt, wenn jemand anfängt
sowas zu überschreiben, dann ist nicht die Variable schuld.
Ronny
/(bb|[^b]{2})/
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#5

AW: Programmierdogmata

  Alt 8. Apr 2013, 12:50

[...]

Wie schon festgestellt wurde, gibt es aber durchaus die Anforderung nach einer einzigen globalen Instanz, die naturbedingt auch nur einmal pro Anwendung vorkommen kann (Application, Screen, etc.).

Nimmt man hier aber jetzt eine globale Variable, so kann diese Variable auch übereschrieben werden, ohne dass die abhängigen Teile darüber informiert werden.

[...]
Man kann theoretisch jeden Mist programmieren, man kann auch Konstanten überschreiben.
Aber wenn ein Entwickler auf die Idee kommt eine globale Variable wie Application zu überschreiben,
dann gehört er gehörig gesteinigt und daran ist nicht die globale Variable schuld.

Gerade Application sehe ich aber eher als gute globale Variable. Wie gesagt, wenn jemand anfängt
sowas zu überschreiben, dann ist nicht die Variable schuld.
Weil es ja auch ach so schwer ist statt
Delphi-Quellcode:
var
  Application : TApplication;
einfach
Delphi-Quellcode:
function Application : TApplication;

implementation

var
  _Application : TApplication;

function Application : TApplication;
begin
  Result := _Application;
end;
zu schreiben. (Die Erzeugung von TApplication hab ich jetzt raus gelassen).

Das kann man aber auch wirklich keinem zumuten
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
Furtbichler
(Gast)

n/a Beiträge
 
#6

AW: Programmierdogmata

  Alt 8. Apr 2013, 13:07
Application ist ein ebenso zweifelhaftes 'gutes' Beispiel gegen die Verwendung von globalen Variablen. Im Kontext einer VCL-Anwendung ist das Application-Objekt existentiell, d.h. Abhängigkeiten eines VCL-Objektes vom Application-Objekt sind systemimmanent.

Nur die Umsetzung des globalen/singulären Zugriffs sollte eben -wie von Sir Rufo beschrieben- über ein Singleton-Pattern laufen.

Andere Beispiele für den globalen Kontext sind z.B. Benutzereinstellungen (die 'INI-Datei') oder auch der Bildschirm und generell die Hardware, wobei der globale und exklusive Zugriff nicht in allen Bereichen notwendig ist.
  Mit Zitat antworten Zitat
Antwort Antwort


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 03:37 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