Wie kann ich meine Kollegen davon überzeugen, keine Datensätze für die Unternehmensentwicklung zu verwenden (.NET 2.0+)

StackOverflow https://stackoverflow.com/questions/37378

  •  09-06-2019
  •  | 
  •  

Frage

Jeder, mit dem ich zusammenarbeite, ist von dem datenzentrierten Ansatz der Unternehmensentwicklung besessen und hasst die Idee, benutzerdefinierte Sammlungen/Objekte zu verwenden.Wie kann man sie am besten vom Gegenteil überzeugen?

War es hilfreich?

Lösung

Wenn Sie an Legacy-Code arbeiten (z. B. Apps, die von .NET 1.x auf 2.0 oder 3.5 portiert wurden), wäre es keine gute Idee, von Datensätzen abzuweichen.Warum etwas ändern, das bereits funktioniert?

Wenn Sie jedoch neue Apps erstellen, können Sie einige Dinge nennen:

  • Appell an das Erleben Schmerz bei der Pflege von Apps, die bei DataSets bleiben
  • Nennen Sie Leistungsvorteile für Ihren neuen Ansatz
  • Ködern Sie sie mit einem guten Mittelweg.Wechseln Sie zu .NET 3.5 und fördern Sie LINQ to SQL, zum Beispiel:Während man immer noch an der datengesteuerten Architektur festhält, stellt es eine gewaltige Abkehr von string-indizierten Datensätzen dar und erzwingt ...Voila!Benutzerdefinierte Sammlungen – auf eine Weise, die ihnen verborgen bleibt.

Wichtig ist, dass Sie bei jedem Ansatz konsistent bleiben und völlig ehrlich über die Vor- und Nachteile Ihrer Ansätze sprechen.

Wenn alles andere fehlschlägt (z. B. Sie haben ein Entwicklungsteam, das sich absolut weigert, von alten Praktiken abzuweichen und skeptisch gegenüber dem Erlernen neuer Dinge ist), ist dies eine sehr, sehr deutliches Zeichen dass Sie Ihrem Team entwachsen sind, ist es Zeit, Ihr Unternehmen zu verlassen!

Andere Tipps

Gehen Sie mit gutem Beispiel voran und gehen Sie vorsichtig vor.Alles, was stärker ist, wird Sie nur vom Rest des Teams entfremden.

Denken Sie daran, die Möglichkeit in Betracht zu ziehen, dass sie auf etwas stoßen, das Sie übersehen haben.Teil eines Teams zu sein bedeutet, abwechselnd zu lernen und zu lehren.

Kein einzelner Mensch hat alle Antworten.

Denken Sie daran, die Möglichkeit in Betracht zu ziehen, dass sie auf etwas stoßen, das Sie übersehen haben.Teil eines Teams zu sein bedeutet, abwechselnd zu lernen und zu lehren.

Abgeordnet.Die ganze Idee, dass sich „Unternehmensentwicklung“ irgendwie von normaler Entwicklung unterscheidet (und normalerweise ist die Implikation „wichtiger als“), ärgert mich wirklich.

Wenn der Einsatz einer bestimmten Technologie wirklich von Vorteil ist, müssen Sie eine wohlüberlegte Liste aller Vor- und Nachteile erstellen, die sich bei einem Wechsel ergeben würden.
Präsentieren Sie diese Liste Ihren Kollegen zusammen mit Erläuterungen und Beispielen zu jedem einzelnen Punkt.

Bei der Erstellung dieser Liste müssen Sie realistisch sein.Man kann nicht einfach sagen: „Das spart uns viel Zeit!!!“GEWINNEN!!“ ohne auf die Tatsache einzugehen, dass es manchmal MEHR Zeit in Anspruch nimmt, X Monate benötigt, um sich mit der neuen Technologie vertraut zu machen usw.Sie müssen konkrete Beispiele zeigen, wo es Zeit spart und wie genau.

Ebenso können Sie die Nachteile Ihrer Kollegen nicht einfach ignorieren, als ob sie keine Rolle spielten Wille ruf dich dazu an.
Wenn du diese Dinge nicht tust oder den Eindruck erweckst, dass du nur das vertrittst, was dir persönlich gefällt, wird dich niemand ernst nehmen und du wirst nur den Ruf haben, der Typ zu sein, der voller Enthusiasmus und Energie ist, aber keine Ahnung hat Über alles mögliche.

Übrigens.Achten Sie auf diesen besonderen Betrug.Es wird alles übertrumpfen, es sei denn, Sie haben ein viel von starken Fällen für all Ihre anderen Sachen:

  • Die Portierung unseres vorhandenen Codes erfordert mehr als 12 Monate Arbeit.Du verlierst.

Natürlich kommt es auf die Situation an.Manchmal sind DataSets oder DataTables besser geeignet, beispielsweise wenn es sich wirklich um eine ziemlich einfache Geschäftslogik, eine flache Hierarchie von Entitäten/Datensätzen oder um einige Versionierungsfunktionen handelt.

Benutzerdefinierte Objektsammlungen glänzen, wenn Sie eine implementieren möchten tiefe Hierarchie/Grafik von Objekten, die nicht effizient in flachen 2D-Tabellen dargestellt werden können.Was Sie demonstrieren können, ist ein großes Objektdiagramm und die Ausbreitung bestimmter Ereignisse in den richtigen Zweigen, ohne ungeeignete Objekte in anderen Zweigen aufzurufen.Auf diese Weise ist es nicht notwendig, jede einzelne DataTable zu durchlaufen oder auszuwählen, nur um die untergeordneten Datensätze zu erhalten.

Beispielsweise gab es in einem Projekt, an dem ich vor zweieinhalb Jahren beteiligt war, ein UI-Modul, das Fragen und Antwortsteuerelemente in einem einzigen WinForms DataGrid anzeigen sollte (genauer gesagt war es das UltraGrid von Infragistics).Einige weitere knifflige Anforderungen

  • Die Antwortsteuerung für eine Frage kann sein irgendetwas - Textfeld, Kontrollkästchenoptionen, Optionsfeldoptionen, Dropdown-Listen oder sogar zum Öffnen eines benutzerdefinierten Dialogfelds, das möglicherweise mehr Daten von einem Webdienst abruft.
  • Je nachdem, was der Benutzer geantwortet hat, können weitere Unterfragen direkt unter der übergeordneten Frage angezeigt werden.Wenn später eine andere Antwort gegeben wird, sollte dies eine weitere Reihe von Unterfragen (falls vorhanden) enthalten, die sich auf diese Antwort beziehen.

Die ursprüngliche Implementierung wurde vollständig in DataSets, DataTables und Arrays geschrieben.Die Menge an Schleifen durch Hunderte von Zeilen für mehrere Tabellen war einfach umwerfend.Es hat nicht geholfen, dass der Programmierer, der einen C++-Hintergrund hatte, es versuchte ref alles (Hallo, Objekte, die im Heap leben Referenzvariablen, wie Zeiger!).Niemand, nicht einmal der ursprüngliche Programmierer, konnte erklären, warum der Code das tut, was er tut.Ich kam mehr als sechs Monate später in die Szene und sie war immer noch voller Bugs.Kein Wunder, dass der Entwickler der zweiten Generation, den ich übernommen habe, beschlossen hat, aufzuhören.

Nach zwei Monaten der Bindung, um das chaotische Durcheinander zu beheben, habe ich es mir zur Aufgabe gemacht, das gesamte Modul in ein umzugestalten Objektorientierter Graph zur Lösung dieses Problems.Ja, komplett mit abstrakten Klassen (um je nach Fragetyp unterschiedliche Antwortsteuerungen in einer Rasterzelle darzustellen), Delegaten und Eventing.Das Endergebnis war ein 2D-DataGrid, das an eine tiefe Hierarchie von Fragen gebunden war und natürlich nach der Eltern-Kind-Anordnung sortiert war.Wenn sich die Antwort einer übergeordneten Frage änderte, löste dies ein Ereignis für die untergeordneten Fragen aus und diese zeigten bzw. versteckten ihre Zeilen im Raster automatisch entsprechend der Antwort des übergeordneten Elements.Es waren nur Frageobjekte in diesem Pfad betroffen.Die Reaktionsfähigkeit der Benutzeroberfläche dieser Lösung lag im Vergleich zur alten Methode um Größenordnungen.

Ironischerweise wollte ich eine Frage stellen, die genau das Gegenteil davon war.Die meisten Programmierer, mit denen ich zusammengearbeitet habe, haben sich für den Ansatz benutzerdefinierter Datenobjekte/-sammlungen entschieden.Es bricht mir das Herz, zuzusehen, wie jemand mit seiner SQL Server-Tabellendefinition auf einem Monitor geöffnet ist und langsam eine passende Zeilenumbruchklasse in Visual Studio auf einem anderen Monitor eingibt (komplett mit privaten Eigenschaften und Getter-Setter für jede Spalte).Es ist besonders schmerzhaft, wenn sie auch dazu neigen, Tabellen mit 60 Spalten zu erstellen.Ich weiß, dass es ORM-Systeme gibt, die diese Klassen automatisch erstellen können, aber ich habe gesehen, dass der manuelle Ansatz viel häufiger verwendet wird.

Technische Entscheidungen beinhalten immer einen Kompromiss zwischen den Vor- und Nachteilen der verfügbaren Optionen.Der DataSet-zentrierte Ansatz hat seine Vorteile (Datenbanktabellen-ähnliche In-Memory-Darstellung der tatsächlichen Datenbankdaten, Klassen, die von Leuten geschrieben wurden, die wissen, was sie tun, die einem großen Entwicklerpool vertraut sind usw.), ebenso wie benutzerdefinierte Datenobjekte (Überprüfung des Kompilierungstyps, Benutzer müssen kein SQL usw. lernen).Wenn alle anderen in Ihrem Unternehmen den DataSet-Weg gehen, ist es zumindest technisch möglich, dass DataSets die beste Wahl für ihre Aufgabe sind.

Datensätze/Tabellen sind doch nicht so schlecht, oder?

Der beste Rat, den ich geben kann, ist, es so oft wie möglich in Ihrem eigenen Code zu verwenden, und hoffentlich werden die anderen Entwickler durch Peer-Reviews und Bugfixes sehen, wie der Code lesbarer wird.(Stellen Sie sicher, dass Sie den Punkt verschieben, wenn diese Vorkommnisse auftreten.)

Wenn der Code letztendlich funktioniert, ist der Rest meines Erachtens Semantik.

Ich denke, Sie können versuchen, die Idee von O/R-Mapping und Mapper-Tools zu verkaufen.Der Vorteil, Zeilen als Objekte zu behandeln, ist ziemlich groß.

Ich denke, man sollte sich auf die Leistung konzentrieren.Wenn Sie eine Anwendung erstellen können, die den Leistungsunterschied bei der Verwendung von DataSets und benutzerdefinierten Entitäten zeigt.Versuchen Sie außerdem, ihnen die Prinzipien des Domain Driven Design zu zeigen und zu zeigen, wie es mit Entity-Frameworks zusammenpasst.

Machen Sie es nicht zu einer Religions- oder Glaubensdiskussion.Diese sind schwer zu gewinnen (und sind sowieso nicht das, was Sie wollen)

Formulieren Sie es nicht so, wie Sie es gerade in Ihrer Frage getan haben.Es geht nicht darum, jemanden dazu zu bringen, zuzustimmen, dass dies oder jenes die generelle Art und Weise ist, wie man arbeiten sollte.Sie sollten darüber sprechen, wie jeder denken muss, um zu jedem Zeitpunkt die richtige Wahl zu treffen.Geben Sie ein Beispiel dafür, wann dataSet verwendet werden sollte und wann nicht.

Ich hatte Entwickler, die dataTables verwendeten, um Daten zu speichern, die sie aus der Datenbank abgerufen hatten, und dann über Geschäftslogikcode verfügten, der diese dataTable nutzte ...Und ich habe ihnen gezeigt, wie ich die Ladezeit einer Seite von 7 Sekunden bei 100 % CPU (auf dem Webserver) auf die Zeit reduziert habe, in der ich überhaupt nicht mehr sehen konnte, wie sich die CPU bewegt.durch Ändern des Speicherobjekts von dataTable in Hash-Tabelle.

Nehmen Sie also ein Beispiel oder einen Fall dafür, dass Ihre Sache anders umgesetzt werden sollte, und gewinnen Sie diesen Kampf.Führen Sie keinen Krieg auf hoher Ebene ...

Wenn Interoperabilität auf der ganzen Linie ein Problem ist/sein wird, ist DataSet definitiv nicht die richtige Richtung.Sie KÖNNEN DataSets/DataTables über einen Dienst verfügbar machen, aber ob Sie dies sollten oder nicht, ist umstritten.Wenn Sie von .NET -> .NET sprechen, sind Sie wahrscheinlich in Ordnung, andernfalls werden Sie einen sehr unzufriedenen Client-Entwickler von der anderen Seite des Zauns haben, der Ihren Service in Anspruch nimmt

Sie können sie nicht vom Gegenteil überzeugen.Wählen Sie eine kleinere Herausforderung oder wechseln Sie zu einer anderen Organisation.Wenn Ihr Vorgesetzter Sie respektiert, prüfen Sie, ob Sie ein Projekt im domänenorientierten Stil als eine Art Technologieversuch durchführen können.

Wenn Sie ein Profil erstellen können, tun Sie es einfach und erstellen Sie ein Profil.Datensätze sind schwerer als einfache Collection<T>

DataReader sind schneller als die Verwendung von Adaptern ...

Das Verhalten eines Objekts zu ändern ist viel einfacher als das Massieren eines Datensatzes

Ohnehin:Tun Sie es einfach, bitten Sie um Vergebung, nicht um Erlaubnis.

Die meisten Programmierer verlassen ihre Komfortzone nicht gerne (beachten Sie, dass der Schnittpunkt der Menge „Die meisten Programmierer“ und der Menge „Stack Overflow“ wahrscheinlich die leere Menge ist).„Wenn es vorher funktioniert hat (oder auch nur funktioniert hat), dann machen Sie damit weiter.“Das Projekt, an dem ich gerade arbeite, erforderte viele Argumente, um die älteren Programmierer dazu zu bringen, XML/Schemas/Datensätze statt nur CSV-Dateien zu verwenden (die vorherige Version der Software verwendete CSVs).Es ist nicht perfekt, die Schemata sind nicht robust genug, um die Daten zu validieren.Aber es ist ein Schritt in die richtige Richtung.Der von mir entwickelte Code verwendet OO-Abstraktionen für die Datensätze, anstatt Datensatzobjekte weiterzugeben.Im Allgemeinen ist es am besten, mit gutem Beispiel voranzugehen, Schritt für Schritt.

Hier gibt es bereits einige sehr gute Ratschläge, aber Sie müssen Ihre Kollegen immer noch überzeugen, wenn Sie nur ein paar unterstützende Kommentare zu Stackoverflow untermauern müssen.Und wenn sie so skeptisch sind, wie sie klingen, werden Sie mehr Munition brauchen.Besorgen Sie sich zunächst ein Exemplar von Martin Fowlers „Patterns of Enterprise Architecture“, das eine detaillierte Analyse verschiedener Datenzugriffstechniken enthält.Lies es.Dann zwingen Sie sie alle, es zu lesen.

Job erledigt.

Datenzentriert bedeutet weniger Code-Komplexität.

Benutzerdefinierte Objekte bedeuten potenziell Hunderte zusätzlicher Objekte, die organisiert, verwaltet und allgemein genutzt werden müssen.Es wird auch etwas schneller gehen.

Ich denke, es ist wirklich eine Frage zwischen Codekomplexität und Leistung, die durch die Anforderungen Ihrer App beantwortet werden kann.

Fangen Sie klein an.Gibt es eine Utility-App, mit der Sie Ihren Standpunkt veranschaulichen können?

An einem Ort, an dem ich gearbeitet habe, hatte die Hauptanwendung beispielsweise einen komplizierten Erstellungsprozess, der das Ändern von Konfigurationsdateien, die Installation eines Dienstes usw. umfasste.

Also habe ich eine App geschrieben, um den Build-Prozess zu automatisieren.Es verfügte über eine rudimentäre WinForms-Benutzeroberfläche.Aber da wir auf WPF umgestiegen sind, habe ich es in eine WPF-Benutzeroberfläche geändert und dank Model-View-Presenter auch die WinForms-Benutzeroberfläche beibehalten.Für diejenigen, die mit Model-View-Presenter nicht vertraut waren, war es ein leicht verständliches Beispiel, auf das sie sich beziehen konnten.

Finden Sie auch etwas Kleines, mit dem Sie ihnen zeigen können, wie eine Nicht-DataSet-App aussehen würde, ohne große Entwicklungsinvestitionen tätigen zu müssen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top