AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Algorithmen, Datenstrukturen und Klassendesign Globale Variablen/Abhängigkeiten = Böse... Und nu?
Thema durchsuchen
Ansicht
Themen-Optionen

Globale Variablen/Abhängigkeiten = Böse... Und nu?

Ein Thema von Dejan Vu · begonnen am 19. Mai 2014 · letzter Beitrag vom 13. Jun 2014
Antwort Antwort
Benutzerbild von Stevie
Stevie

Registriert seit: 12. Aug 2003
Ort: Soest
4.012 Beiträge
 
Delphi 10.1 Berlin Enterprise
 
#1

AW: Globale Variablen/Abhängigkeiten = Böse... Und nu?

  Alt 19. Mai 2014, 16:19
ich habe hier ein paar sehr kluge Programmierer, die nur den Regeln folgen und dabei gar nicht merken, wie verworren, komplex und total überkandidelt das Ganze mittlerweile ist. Aber sie reiten auf den von Dir immer wieder zitierten Regeln herum und finden es total geil, sich 3 Tage über SRP den Kopf zu zerbrechen, anstatt es einfach 'einfach' zu gestalten. Ein sehr schönes Thema für einen anderen Thread.
Genau aus diesem Grund hab ich vorhin geschrieben, dass das ganze Clean Code, Principles und Patterns Gedöns kein Selbstzweck ist. Aber jeder, der sich mit der ganzen Thematik wenigstens ein bisschen auseinander gesetzt hat und etwas davon in die Tat umgesetzt hat, hat bestätigt, dass das positiv war. Was raus kommt, wenn mans übertreibt kann man sehr schön an dieser Fizzbuzz Implementierung sehen.

Zitat:
mir hast Du das noch nicht gesagt.
Prima, dann hab ich ja doch noch jemanden erreicht, dem ich das noch nicht gesagt habe
Ich hab mir das ja auch nicht selber ausgedacht, man kann das auch oft in Artikeln zu dem Thema lesen.
Erstmal die Prinzipien und vor allem das DIP verstehen und manuell anwenden, bevor man sich einem IoC Container zuwendet. Ansonsten wird man nämlich ganz schnell ziemlich böse davon überfahren und benutzt nen IoC Container am Ende als Service Locator.

Zitat:
Aber dann verstehe ich deinen Einwand auch nicht: Ich habe ein Kommando als oberste Instanz. Dies führt eine Aktion und alle damit verbundenen weiteren Aktionen aus (Speichern, loggen, drucken, validieren etc.) Dem muss ich doch alle Abhängigkeiten übergeben, oder wie geht das sonst?
Wenn man das betrachtet, als ob dein Kommando das alles selbst macht. Macht es aber eventuell gar nicht. Möglich ist an dieser Stelle zum Beispiel, das Chain- of-responsibility Pattern zu verwenden, so dass ebend nicht alles direkt innerhalb des einen Kommandos ausgeführt wird, sondern eins das nächste ausführt. Auch hier wieder beachten: wie flexibel und austauschbar möchte ich die Kommandos haben. Die Aktionen Speichern, Loggen, Drucken, Validieren operieren ja normalerweise auf einem anderen Objekt. Und je nachdem, wie man die geschrieben hat (Speichern ist ja immer eins der Paradebeispiele für "Wat kann ich eijentlich mit dieser RTTI und Attributen so machen?") hat man mehr oder weniger wiederverwendbare Bausteine, die man in verschiedenen Reihenfolgen aneinander ketten kann.

Eins steht aber auf jeden Fall fest - und das mag für manche befremdlich sein: man muss recht viel stumpfen Code für die Erstellung und Zusammentackerei schreiben. Und das ist am Ende das, was der IoC Container einem abnehmen kann.
Stefan
“Simplicity, carried to the extreme, becomes elegance.” Jon Franklin

Delphi Sorcery - DSharp - Spring4D - TestInsight

Geändert von Stevie (19. Mai 2014 um 16:25 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von BUG
BUG

Registriert seit: 4. Dez 2003
Ort: Cottbus
2.094 Beiträge
 
#2

AW: Globale Variablen/Abhängigkeiten = Böse... Und nu?

  Alt 19. Mai 2014, 20:26
Was raus kommt, wenn mans übertreibt kann man sehr schön an dieser Fizzbuzz Implementierung sehen.
Das Ding ist super
  Mit Zitat antworten Zitat
Benutzerbild von implementation
implementation

Registriert seit: 5. Mai 2008
940 Beiträge
 
FreePascal / Lazarus
 
#3

AW: Globale Variablen/Abhängigkeiten = Böse... Und nu?

  Alt 13. Jun 2014, 19:31
Mir war der Begriff "Globale Abhängigkeit" neu, und ich finde auch bei Google nichts darunter. Hat vielleicht jemand ein paar gute Links dazu oder einen alternativen Begriff unter dem etwas zu finden ist?

Mir viel nämlich gerade auf, dass eine Haskell-Bibliothek, die ich aus ganz anderen Gedanken schrieb, eine perfekte Struktur hat, so etwas auch allgemeiner zu bedienen, daher will ich da mal etwas nachforschen.

Geändert von implementation (13. Jun 2014 um 19:34 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.201 Beiträge
 
Delphi 12 Athens
 
#4

AW: Globale Variablen/Abhängigkeiten = Böse... Und nu?

  Alt 13. Jun 2014, 19:41
Im Prinzip heißt es, daß der Code von "globalen" Dingen abhängig ist.
Du greifst also von deinem Code auf eine globale Variable zu, bzw. holst dir aus irgendeiner fremden Instanz etwas raus.

Beispiel: die globalen Form-Variablen (von Form2 auf Form1 zugreifen)

Damit bist du davon abhängig. Ohne geht nicht und mit was Anderem auch nicht.



Wenn du dir das jetzt aber geben lässt, anstatt es von irgendwo zu holen, dann bist du nicht mehr abhängig und man kann dich mit sonstwas verwenden.



Man lässt sich Eingabedinge geben und Rückgaben gibt man entweder an ein interface raus, wo sich aber jeder registrieren kann, bzw. es wird über eine Callback-Methode rausgegeben.
* nichts selber holen, außer von frei registrierbaren Quellen, oder sich alles geben lassen
* nicht selber irgendwo an was Festes übergeben, außer an frei registrierbare Ziele, oder die Ergebnisse abholen lassen

* wenn man davon problemlos mehrere Instanzen erstellen kann, ohne daß sich beide Instanzen irgendwie in die Quere kommen, dann gibt es vermutlich keine Abhängigkeiten
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests

Geändert von himitsu (13. Jun 2014 um 19:48 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Stevie
Stevie

Registriert seit: 12. Aug 2003
Ort: Soest
4.012 Beiträge
 
Delphi 10.1 Berlin Enterprise
 
#5

AW: Globale Variablen/Abhängigkeiten = Böse... Und nu?

  Alt 13. Jun 2014, 20:01
"Globale Abhängigkeit" = Abhängigkeit auf einen global State (meist eine globale Variable oder ein Singleton).

Siehe dazu z.B. dieser Clean Code Talk.
Stefan
“Simplicity, carried to the extreme, becomes elegance.” Jon Franklin

Delphi Sorcery - DSharp - Spring4D - TestInsight
  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 12:46 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