Gibt es ein Programmierparadigma, das Abhängigkeiten für andere Programmierer extrem offensichtlich macht?

26

Ich arbeite in einem Data Warehouse, das über viele Streams und Layer mit labyrinthartigen Abhängigkeiten, die verschiedene Artefakte verbinden, mehrere Systeme beschafft. Ziemlich jeden Tag stoße ich auf Situationen wie diese: Ich führe etwas aus, es funktioniert nicht, ich gehe eine Menge Code durch, aber Stunden später merke ich, dass ich es geschafft habe, die Prozesslandkarte eines winzigen Teils dessen, was ich jetzt weiß, zu konzipieren Da dies später am Tag erforderlich ist, frage ich jemanden und er teilt mir mit, dass dieser andere Stream zuerst ausgeführt werden muss. Wenn ich dies hier überprüfe (was auf einen scheinbar willkürlichen Teil eines enormen Stapels anderer codierter Abhängigkeiten hinweist), hätte ich dies getan das gesehen. Es ist unglaublich frustrierend.

Wenn ich dem Team vorschlagen könnte, dass es vielleicht eine gute Idee wäre, mehr zu tun, um die Abhängigkeiten zwischen Objekten sichtbarer und offensichtlicher zu machen, anstatt sie tief in rekursive Codeebenen oder sogar in die Daten, die diese enthalten, einzubetten muss vorhanden sein, weil es von einem anderen Stream bevölkert wird, vielleicht unter Bezugnahme auf ein bekanntes, erprobtes Software-Paradigma - dann kann ich möglicherweise meine Arbeit vereinfachen und alle anderen sind viel einfacher.

Es ist ziemlich schwierig, meinem Team die Vorteile davon zu erklären. Sie neigen dazu, Dinge einfach so zu akzeptieren, wie sie sind, und „denken nicht groß“, um die Vorteile einer neuen Konzeptualisierung des gesamten Systems zu erkennen - sie sehen das nicht wirklich, wenn Sie ein riesiges System modellieren können Effizient dann macht es es weniger wahrscheinlich, dass Sie auf Speichereffizienzen stoßen, eindeutige Einschränkungen und doppelte Schlüssel stoppen, Daten unsinnig machen, weil es viel einfacher ist, sie in Übereinstimmung mit der ursprünglichen Vision zu entwerfen, und Sie werden später nicht auf all diese Probleme stoßen, die Wir erleben jetzt, was ich aus früheren Berufen als ungewöhnlich kenne, was sie aber für unvermeidlich halten.

Kennt jemand ein Software-Paradigma, das Abhängigkeiten betont und ein gemeinsames konzeptionelles Modell eines Systems fördert, um die langfristige Einhaltung eines Ideals sicherzustellen? Im Moment haben wir so ziemlich ein riesiges Durcheinander und die Lösung für jeden Sprint scheint zu lauten: "Fügen Sie einfach hier und hier und hier etwas hinzu."

Christs_Chin
quelle
2
Können Sie erklären, welche Art von "labyrinthartigen Abhängigkeiten, die verschiedene Artefakte verbinden", dies sind? Bauen sie Abhängigkeiten auf, die mit einem Build-Tool wie Maven gelöst werden könnten? Handelt es sich um Eingabeabhängigkeiten, bei denen eines dieser Artefakte von Eingaben abhängt, die nicht offensichtlich oder nicht eindeutig sind? Handelt es sich um Schlüsselabhängigkeiten zwischen Datenbanktabellen?
FrustratedWithFormsDesigner
Das System ist PLSQL, Unix Bash, OWB usw., daher gibt es alle möglichen Abhängigkeiten. Manchmal werden Daten von einem bestimmten Format, an einem bestimmten Ort, zu einem bestimmten Zeitpunkt, von einem bestimmten Modul benötigt, aber dies ist aus dem Code nicht entfernt ersichtlich und kann nur auf zwei Arten erkannt werden: Nehmen Sie sich vielleicht einige Tage Zeit, um herauszufinden, dass einige Daten in einem Teil des Systems, von dem Sie nicht einmal wussten, dass er referenziert wird, ein abgrenzendes Semikolon aufweisen jedes Mal. Es fördert nicht die Unabhängigkeit.
Christs_Chin
4
Buchstäblich alle
Miles Rout
3
Kleine Tangente: Da Haskell faul ist, legen Sie beim Schreiben von Code die Reihenfolge der Vorgänge praktisch nicht fest. Sie geben nur Abhängigkeiten an. Funktion C hängt von den Ergebnissen der Funktionen A und B ab. Daher müssen A und B vor C ausgeführt werden, aber es könnte genauso gut funktionieren, wenn A zuerst ausgeführt wird oder wenn B zuerst ausgeführt wird. Ich fand das nur interessant.
GlenPeterson
1
Es gibt ein Buch namens Design Patterns (das Buch ist zum Kotzen, aber das meiste, was es sagt, ist gut, mit Ausnahme des Singleton-Teils). Es enthält mehrere Abschnitte zum Verwalten von Abhängigkeiten.
Strg-Alt-Delor

Antworten:

19

Auffindbarkeit

Seine Abwesenheit plagt viele Organisationen. Wo ist das Werkzeug, das Fred wieder gebaut hat? Sicher im Git-Repository. Woher?

Das Software-Muster, an das ich denke, ist Model-View-ViewModel. Für die Uneingeweihten ist dieses Muster ein Rätsel. Ich erklärte es meiner Frau als "fünf Widgets, die über dem Tisch schwebten und über eine mysteriöse Kraft miteinander sprachen". Verstehen Sie das Muster und Sie verstehen die Software.

Viele Softwaresysteme können ihre Architektur nicht dokumentieren, weil sie davon ausgehen, dass sie selbsterklärend ist oder sich auf natürliche Weise aus dem Code ergibt. Ist es nicht und tut es nicht. Wenn Sie keine genau definierte Architektur verwenden, gehen neue Leute verloren. Wenn es nicht dokumentiert ist (oder nicht bekannt ist), gehen neue Leute verloren. Und Veteranen werden auch verloren gehen, wenn sie ein paar Monate nicht mehr mit dem Code zu tun haben.

Es liegt in der Verantwortung des Teams, eine vernünftige Organisationsarchitektur zu entwickeln und diese zu dokumentieren. Dazu gehören Dinge wie

  • Ordnerorganisation
  • Projektreferenzen
  • Klassendokumentation (was es ist, was es tut, warum es existiert, wie es benutzt wird)
  • Projekt, Modul, Montage, welche Dokumentation auch immer.

Es liegt in der Verantwortung des Teams, die Dinge so zu organisieren und erkennbar zu machen, dass das Team das Rad nicht ständig neu erfindet.

Übrigens ist der Begriff "Code sollte sich selbst dokumentieren" nur teilweise richtig. Zwar sollte Ihr Code klar genug sein, damit Sie nicht jede Codezeile mit einem Kommentar erläutern müssen, die Beziehungen zwischen Artefakten wie Klassen, Projekten, Assemblys, Schnittstellen und dergleichen sind jedoch nicht offensichtlich müssen dokumentiert werden.

Robert Harvey
quelle
3
Sicher, aber Menschen, die sich zu sehr auf Designmuster stützen, sind Teil des Problems. Es sind diejenigen, die Code ohne Dokumentation schreiben, vorausgesetzt, dass jeder andere verstehen wird, was zum Teufel sie getan haben, nur indem sie sich den Code angesehen haben. Außerdem sind Software-Entwurfsmuster (größtenteils) keine Architektur .
Robert Harvey
1
Wo ist das Werkzeug, das Fred wieder gebaut hat? Sicher im Git-Repository. Woher? - Genau! Das MVC-Muster ist zu spezifisch für die Front-End-Entwicklung (glaube ich), und Muster sind nur dann nützlich, wenn jeder im Team sie kennt, sodass sich das Problem von nicht offensichtlichen Abhängigkeiten auf sie verlagert, wenn jeder weiß, wie man sie findet Sie. Das Problem setzt jedoch voraus, dass dies nicht der Fall ist. Daher hoffe ich, dass es etwas gibt, das einen wirklich offensichtlichen Weg zur Erklärung von Abhängigkeiten bietet, für dessen Verwendung Sie keinen anderen erlernten konzeptionellen Rahmen benötigen.
Christs_Chin
7
Es heißt "Dokumentation". Darüber hinaus benötigen Sie ein sinnvolles Abhängigkeits-Framework, das von allen unterstützt wird. Leider gibt es keine Boilerplate-Vorlage, die Sie einfach in Ihr Projekt einfügen können. Die Organisationsstruktur der Software wird von Ihrem Team mithilfe einer vernünftigen Architektur selbst erstellt.
Robert Harvey
5
@RobertHarvey: Vor kurzem gehört: "Wir schreiben Code, der keine Dokumentation benötigt". Falsch. Sie schreiben Code ohne Dokumentation.
gnasher729
3
Ein paar gute Sachen hier. Hinweis: Es gibt einen Unterschied zwischen dem Schreiben von Code, für den keine Kommentare erforderlich sind , und dem Schreiben von unterstützender Dokumentation.
Robbie Dee
10

Der beste Weg, um diese Art von Problemen anzugehen, ist inkrementell. Seien Sie nicht frustriert und schlagen Sie umfassende architektonische Änderungen vor. Diese werden niemals genehmigt und der Code wird sich niemals verbessern. Vorausgesetzt, Sie können sogar die korrekten umfassenden architektonischen Änderungen bestimmen, die unwahrscheinlich sind.

Was ist wahrscheinlich, dass Sie eine kleinere Veränderung feststellen konnte , die Sie mit dem spezifischen Problem geholfen haben , würden Sie nur gelöst. Vielleicht einige Abhängigkeiten umkehren, Dokumentation hinzufügen, eine Schnittstelle erstellen, ein Skript schreiben, das vor einer fehlenden Abhängigkeit warnt, usw. Schlagen Sie stattdessen diese kleinere Änderung vor. Je nach Unternehmenskultur kann es sogar sein, dass sie solche Verbesserungen als Teil Ihrer ursprünglichen Aufgabe tolerieren oder sogar von Ihnen erwarten.

Wenn Sie diese kleineren Änderungen zu einem regelmäßigen Bestandteil Ihrer Arbeit machen und durch Ihr Beispiel andere dazu ermutigen, summieren sich diese im Laufe der Zeit. Viel effektiver als über einzelne größere Änderungen zu jammern, die Sie nicht vornehmen dürfen.

Karl Bielefeldt
quelle
2
Ich stimme der Idee von inkrementellen Änderungen zu. Das Problem ist, dass Sie ohne einige Organisationsprinzipien einfach mehr Chaos schaffen. Betrachten Sie den Effekt des Verschiebens eines einzelnen Projekts, einer Klasse oder eines anderen Artefakts (von dem andere Module abhängen) an einen sinnvolleren Ort.
Robert Harvey
1
Tolles Zeug. Meine Mühen wurden oft von ein paar fleißigen Seelen gemildert, die den Mut haben, hier und da ein Werkzeug / Widget hinzuzufügen, um Ordnung aus dem Chaos zu schaffen. Ich bin zwar kein Fan von Unmengen an Dokumentation, aber ein gut geschriebener Spickzettel oder eine Aufzählungsliste mit Fallstricken / Features kann sehr hilfreich sein.
Robbie Dee
+1 für das Vorschlagen kleiner Änderungen, die wahrscheinlich genehmigt werden. Ich habe das erlebt und es hat mir geholfen, jemand mit mehr Einfluss zu werden, und dann haben meine Vorschläge mehr Wirkung gezeigt.
RawBean
2

Die Architektur.

Es gibt kein einzelnes, spezifisches, universelles Prinzip oder Verfahren, das die Probleme der Auffindbarkeit und Wartbarkeit löst, die für alle Aspekte der gesamten Software gelten. Aber der allgemeine Begriff für das, was ein Projekt vernünftig macht, ist Architektur.

Ihre Architektur ist die Gesamtheit aller Entscheidungen in Bezug auf jeden Punkt potenzieller (oder historischer) Verwirrung - einschließlich der Festlegung, wie Architekturentscheidungen getroffen und dokumentiert werden. Alles, was sich auf den Entwicklungsprozess, die Ordnerstruktur, die Codequalität, Entwurfsmuster usw. bezieht, kann in Ihre Architektur einfließen, aber keine davon ist eine Architektur.

Im Idealfall werden diese Regeln durch eine Singularität des Geistes vereinheitlicht .

Ein kleines Team kann sicherlich gemeinsam Architektur schaffen. Bei unterschiedlichen Meinungen kann dies jedoch schnell zu einer sehr schizophrenen Architektur führen, die nicht dazu dient, Ihre geistige Gesundheit zu erhalten. Der einfachste Weg, um sicherzustellen, dass Ihre Architektur und die vielen TLAs und Muster darin dem Erfolg des Teams mit einer Singularität des Geistes dienen, besteht darin , einen einzelnen Geist für sie verantwortlich zu machen.

Nun, das erfordert nicht unbedingt einen "Architekten" zum Pontifikieren . Und während einige Teams vielleicht möchten, dass eine erfahrene Person nur diese Entscheidungen trifft, ist der wichtigste Punkt, dass jemand die Architektur besitzen muss, insbesondere wenn das Team wächst. Jemand hat den Finger am Puls des Teams, moderiert Architekturdiskussionen, dokumentiert Entscheidungen und überwacht Entscheidungen und arbeitet weiter an der Einhaltung der Architektur und ihres Ethos.

Ich bin kein großer Fan von jemandem, der alle Entscheidungen trifft. Die Identifizierung eines "Architekten" oder "technischen Produktbesitzers", der für die Moderation von Architekturdiskussionen und die Dokumentation von Entscheidungen verantwortlich ist, bekämpft jedoch ein größeres Übel: Die Diffusion von Verantwortung, die zu keiner erkennbaren Architektur führt.

Svidgen
quelle
Sie haben absolut Recht, wenn Sie die Diffusion von Verantwortung als für keine erkennbare Architektur verantwortlich bezeichnen. Es wurden erst kürzlich Entscheidungen getroffen, um dieses Problem zu beheben. Ich denke immer, dass eine gute Lösung dafür darin besteht, ein ganzes verteiltes System durch ein anderes Softwaresystem zu erstellen, das als eine Art Kabel dient, in dem Sie entscheiden, was in das System eingeht, aber es entscheidet, wo, je nachdem, wie der Architekt es programmiert. Sie hätten einen Blick auf mehrere unterschiedliche Systeme und Technologien und würden sie über ein Systemarchitekturdiagramm navigieren ...
Christs_Chin
Ich denke, Ihr Punkt in dieser Antwort ist der beste Weg, um die Art der Dinge, über die das OP spricht, zu bekämpfen / zu verhindern. Es gilt sogar für das Erben eines Chaos wie im OP.
GWR
1

Willkommen bei Software Engineering (in beiden Richtungen);) Dies ist eine gute Frage, aber es gibt wirklich keine einfachen Antworten, wie Sie sicher wissen. Es geht wirklich darum, sich im Laufe der Zeit zu besseren Praktiken zu entwickeln und die Menschen darin zu schulen, geschickter zu sein (per Definition sind die meisten Leute in der Branche mittelmäßig kompetent) ...

Die Softwareentwicklung als Disziplin leidet darunter, dass sie zuerst erstellt und nach dem Mentalitätsprinzip entwickelt wird, zum Teil aus Gründen der Zweckmäßigkeit und zum Teil aus Gründen der Notwendigkeit. Es ist nur die Natur des Tieres. Und natürlich bauen Hacks im Laufe der Zeit auf Hacks auf, da die oben genannten Codierer schnell funktionierende Lösungen implementieren, die den kurzfristigen Bedarf häufig auf Kosten der Einführung technischer Schulden lösen.

Das Paradigma, das Sie verwenden müssen, besteht im Wesentlichen darin, bessere Leute zu finden, die Leute zu schulen, die Sie gut haben, und zu betonen, wie wichtig es ist, sich Zeit für Planung und Architektur zu nehmen. Man kann nicht einfach so "agil" sein, wenn man mit einem monolithischen System arbeitet. Es kann eine beträchtliche Planung erfordern, auch kleine Änderungen vorzunehmen. Wenn Sie einen hervorragenden Dokumentationsprozess auf hoher Ebene einrichten, können Sie auch wichtige Personen dabei unterstützen, den Code schneller in den Griff zu bekommen.

Die Ideen, auf die Sie sich konzentrieren könnten, wären (im Laufe der Zeit, schrittweise) das Isolieren und Umgestalten wichtiger Teile des Systems auf eine Weise, die sie modularer und entkoppelter, lesbarer und wartbarer macht. Der Trick besteht darin, dies auf die bestehenden Geschäftsanforderungen abzustimmen, sodass die Reduzierung der technischen Schulden gleichzeitig mit der Erzielung eines sichtbaren Geschäftswertes erfolgen kann. Die Lösung besteht zum einen darin, Praktiken und Fähigkeiten zu verbessern und zum anderen, wie ich Ihnen bereits sagen kann, mehr auf ein langfristiges architektonisches Denken hinzuarbeiten.

Beachten Sie, dass ich diese Frage aus der Perspektive der Softwareentwicklungsmethodik und nicht aus der Perspektive der Codiertechnik beantwortet habe, da dies in Wirklichkeit ein Problem ist, das viel größer ist als die Details der Codierung oder sogar des Architekturstils. Es ist wirklich eine Frage, wie Sie Veränderungen planen.

Brad Thomas
quelle
6
Ich höre, was Sie sagen, aber Ihre Antwort ist letztendlich unbefriedigend und ehrlich gesagt ein bisschen beleidigend. Es ist ein größeres Problem, als nur bessere Leute einzustellen. Selbst in dem kleinen Laden, in dem ich arbeite, haben wir Probleme damit, und ich denke, es ist mehr als nur ein Menschenproblem. Ich denke, es hat einige spezifische technische Schwachstellen.
Robert Harvey
1
Ich stimme zu, dass es technische Aspekte gibt, aber ich denke, dass diese im Vergleich zur Betonung einer stärkeren Methodik für die Planung von Änderungen relativ gering sind. Ich sehe darin weniger Designmuster als vielmehr einen kulturellen Wandel hin zu mehr Planung und Analyse, zu früherer Planung und Analyse und zu besserer Planung und Analyse.
Brad Thomas
Okay, ich werde meine eigene Antwort als Vergleich posten. Ich denke, es hat nichts mit Software-Mustern zu tun.
Robert Harvey
Brad, danke für die Antwort. Ihre Antwort wird geschätzt, da ich weiß, dass ich dieses Problem nicht allein kenne. In meinem Team sieht es einfach so aus. Ich stimme auch Robert Harvey darin zu, dass dieses Problem weit verbreitet ist und ich nicht aufgeben möchte, dass es eine Lösung gibt, entweder für eine neue Art von Software oder für eine neue Arbeitsweise.
Christs_Chin
2
Genau meine Erfahrung: Sie müssen Ihren Teammitgliedern klar machen, was sie tun. Ich sehe Leute, die MVVM und MVC mischen, andere, die WPF-Steuerelemente wie bei Windows Forms (oder besser gesagt: VB6) verwenden, Leute, die in C # programmieren, ohne ein grundlegendes Verständnis der Objektorientierung zu haben ... Bringen Sie ihnen bei. Lehre sie noch einmal. Sei frustriert. Bringe ihnen noch einmal bei ... Oft denke ich daran aufzugeben. Und sie wieder unterrichten ...
Bernhard Hiller
1

Ich mag @ RobertHarveys Vorstellung von Konventionen und denke, sie helfen. Ich mag auch die Idee von @ KarlBielefeldt, "Document as you go" zu machen und zu wissen, dass dies wichtig ist, weil nur so die Dokumentation auf dem neuesten Stand bleibt. Aber ich denke, die übergreifende Idee ist, dass es wichtig ist, zu dokumentieren, wie Sie alle Teile Ihres Codes finden, erstellen und bereitstellen können!

Ich habe kürzlich ein bedeutendes Open Source-Projekt per E-Mail verschickt, das eine XML-Konfiguration hatte, bei der der generierte Code vollständig undokumentiert war. Ich fragte den Betreuer: "Wo ist dieser XML-Codegenerierungsprozess dokumentiert? Wo ist das Setup der Testdatenbank dokumentiert?" und er sagte: "Es ist nicht." Es handelt sich im Grunde genommen um ein Einzelprojekt, und jetzt weiß ich, warum.

Schauen Sie, wenn Sie diese Person sind und dies lesen, weiß ich wirklich zu schätzen, was Sie tun. Ich verehre praktisch die Früchte Ihrer Arbeit! Aber wenn Sie eine Stunde damit verbracht haben, zu dokumentieren, wie Ihre wirklich kreativen Dinge zusammengesetzt sind, könnte ich ein paar Tage damit verbringen, neue Funktionen zu programmieren, die Ihnen helfen könnten. Wenn ich mit der Ziegelmauer konfrontiert werde, dass "Mangel an Dokumentation kein Problem ist", werde ich es nicht einmal versuchen.

In einem Unternehmen ist ein Mangel an Dokumentation eine enorme Zeit- und Energieverschwendung. Projekte wie dieses werden oft an Berater vergeben, die noch mehr kosten, nur damit sie grundlegende Dinge herausfinden können wie "Wo sind alle Teile und wie passen sie zusammen?".

Abschließend

Was benötigt wird, ist nicht so sehr eine Technologie oder Methodik, sondern ein Kulturwandel. eine gemeinsame Überzeugung, dass es wichtig ist, zu dokumentieren, wie Dinge gebaut werden und warum. Es sollte Teil der Codeüberprüfung sein, eine Voraussetzung für die Umstellung auf die Produktion, die an Erhöhungen gebunden ist. Wenn jeder das glaubt und danach handelt, werden sich die Dinge ändern. Ansonsten wird es so sein, als wäre mein Open-Source-Beitrag gescheitert.

GlenPeterson
quelle
2
Ich vermute, dass ein Teil des kulturellen Problems in der Überzeugung von Agile liegt, dass "wenn es nicht Teil einer User Story ist (dh nicht direkt zum Wert der Stakeholder beiträgt), dann ist es nicht wichtig". Hogwash. Verwandte Konversation hier: Wie werden in Agile grundlegende Infrastrukturaufgaben zu Beginn eines Projekts geplant und zugewiesen?
Robert Harvey
@RobertHarvey Ja. Jeder in meinem Team ist unglaublich intelligent und sehr einfach zu handhaben. Die Scrum Master und Projektmanager sind gut gemeint und motiviert, und die Praktiken sind die agilsten, in denen ich gearbeitet habe. Aber die Dokumentation fehlt, wahrscheinlich aus dem Grund, den Sie vorschlagen. Darüber hinaus wird bei der Erstellung der Dokumentation die Fähigkeit der Person, relevante Konzepte zu identifizieren und zu erläutern, sowie ihre Einstellung zur Übernahme einer solchen Aufgabe zu erwähnen, um eine weitere Ebene der Zufälligkeit in der Kommunikationseffektivität erweitert. Normalerweise ist es nur "Jemanden fragen"
Christs_Chin
@ GlenPeterson Ja, ich bin damit einverstanden, dass dies hilfreich wäre. Es sollte aber nicht nur festgelegt werden, dass es gebaut werden soll, sondern auch, wie und was als Dokumentation qualifiziert ist. Als aktuelles Beispiel hat hier jemand eine Liste mit neuen Nummern aufgenommen, die unser System identifizieren wird. Das ist es. Es wurde nicht erwähnt, wie diese Nummern in das System gelangen, wo, warum, von wem, wie oft oder irgendetwas Nützliches, nur das, was sie tun. Ich habe mich zu keinem Zeitpunkt gefragt, welche Zahlen unser System als relevant identifiziert. Aber ich habe mich oft gefragt, wo sie hingehen, wohin sie gehen und was auf dem Weg passiert. Es ist immer noch ein Rätsel.
Christs_Chin
1
@Christs_Chin So viel Kommunikation basiert auf dem Kontext. Ohne diesen Kontext sind die meisten Kommunikationen nahezu bedeutungslos. Ich fühle deinen Schmerz. Aber ich denke, es ist schwer zu schreiben (Englisch), damit andere dich verstehen können. Manchmal haben frühe Spezifikationen für ein System den Kontext, den Sie benötigen, um es zu verstehen, auch wenn sie schrecklich veraltet sind. Der Kontext hilft normalerweise.
GlenPeterson
1

Um die Frage so zu beantworten, wie sie gestellt wird (anstatt Ihnen Ratschläge für Ihre spezielle Situation zu geben):

Das als reine Funktionsprogrammierung bekannte Programmierparadigma erfordert, dass in Eingabeparametern alles angegeben wird, was die Ausgabe einer Funktion beeinflusst. Es gibt keine versteckten Abhängigkeiten oder globalen Variablen oder andere mysteriöse Kräfte, die unsichtbar in der Codebasis wirken. Es gibt keine zeitliche Kopplung "Sie müssen dies zuerst tun".

JacquesB
quelle
0

Jedes Data Warehouse ist anders, aber Sie können eine Menge tun, um sich die Arbeit zu erleichtern.

Für den Anfang hatte jede Zeile in der Datenbank ein DATE_ADDED und ein DATA_UPDATED Spalte, sodass wir sehen konnten, wann sie der Datenbank hinzugefügt und wann sie geändert wurde. Wir hatten auch eine SOURCE_CODE- Spalte, damit wir verfolgen konnten, wo jedes Datenbit in das System einging.

Als Nächstes hatten wir gemeinsame Tools, die in allen unseren Data Warehouses zum Einsatz kamen, z. B. Sortierungen, Tabellenübereinstimmungen, Slicer und Dicer usw.

Der maßgeschneiderte Code wurde auf ein absolutes Minimum beschränkt und musste selbst dann verschiedene Codierungs- und Berichtsstile bestätigen.

Ich gehe davon aus, dass Sie mit ETL bereits vertraut sind Suiten . Es gibt eine Menge Funktionen, die du heutzutage kostenlos bekommst und die ich vor ungefähr einem Jahrzehnt noch nicht im Spiel hatte.

Vielleicht möchten Sie sich auch Data Marts ansehen, um eine benutzerfreundlichere , bereinigte Version Ihres Data Warehouse zu präsentieren. Das ist natürlich keine Silberkugel, könnte aber bei bestimmten Problemen helfen, anstatt Ihr Data Warehouse neu aufzubauen / zu korrigieren.

Robbie Dee
quelle
Danke für die Antwort. Ja, wir verwenden all diese Felder, aber sie helfen nur bei der Identifizierung einer einzelnen Zeile, nicht bei Abhängigkeiten zwischen Streams, Layern und Systemen. Sie haben Recht mit den ETL-Suiten - wir waren gerade dabei, ein Upgrade auf ein bekanntes ETL-Tool durchzuführen, das nicht mehr unterstützt wird, sondern stattdessen wieder auf PLSQL umgestellt wird. Es ist in Ordnung zu programmieren, aber für die Wartbarkeit und das Verständnis des Gesamtsystems auf Codeebene ist es absolut schrecklich.
Christs_Chin
1
Das Ideal ist, dass Sie Daten über Staging-Tabellen oder Flatfiles von Anfang bis Ende nachverfolgen können. Wenn Sie dies jedoch nicht haben, bleibt Ihnen der Walking-Code.
Robbie Dee
0

Ich weiß nicht, wie wichtig es für Ihren Fall ist, es gibt einige Strategien, um Abhängigkeiten sichtbarer zu machen und die allgemeine Pflege von Code-

  • Vermeiden Sie globale Variablen, verwenden Sie stattdessen Parameter. Dies gilt auch für sprachübergreifende Anrufe.
  • Vermeiden Sie es, die Werte der Variablen so oft wie möglich zu ändern oder zu verändern. Erstellen Sie eine neue Variable und verwenden Sie, wenn möglich, wenn Sie den Wert ändern müssen.
  • Machen Sie den Code modular. Wenn es nicht möglich ist, in einem einfachen Satz zu beschreiben, was (nicht wie) der Teil tatsächlich tut, teilen Sie ihn in Module auf, die die Bedingung erfüllen.
  • Nennen Sie Ihre Code-Teile richtig. Wenn Sie in einfachen Worten beschreiben können, was ein Teil des Codes tut, werden diese Begriffe zum Namen des Teils. Auf diese Weise wird der Code durch die Namen der Module / Klassen / Funktionen / Prozeduren / Methoden usw. selbstdokumentierend.
  • Testen Sie Ihren Code. Testen Sie, ob die Entitäten in Ihrem Code ihre Namen rechtfertigen (siehe oben).
  • Ereignisse im Code protokollieren. Mindestens zwei Protokollebenen beibehalten. Erstens ist immer einer aktiviert (auch in der Produktion) und protokolliert nur kritische Ereignisse. Und mit dem anderen kann im Grunde alles protokolliert, aber ein- oder ausgeschaltet werden.
  • Finden und verwenden Sie geeignete Tools zum Durchsuchen, Verwalten und Entwickeln Ihrer Codebasis. Sogar eine einfache Option "Alles durchsuchen" von Visual Studio Code hat mir das Leben in bestimmten Fällen erheblich erleichtert.
Gulshan
quelle