Bogarting der Datenzugriffsschicht

9

Situation: Die dba ist ein externer Auftragnehmer, der den gesamten DAL-Code in TFS auscheckt. Als Front-End-Entwickler wäre es schön, Spalten hinzufügen und Procs und so weiter optimieren zu können, ohne darauf warten zu müssen, dass dieser Typ auf Ihre E-Mails antwortet, um die Arbeit zu erledigen.

Frage: Was wäre eine empfohlene Lösung / ein empfohlener Prozess, der eine schnellere / agilere Entwicklung bei gleichzeitiger Wahrung der Datenintegrität sowie der Friedensliebe und des Glücks im Team ermöglicht?

Spaghetticowboy
quelle
Ich mache mir hier Sorgen darüber, warum Sie eine Spalte hinzufügen mussten und welche Geschäftsregeln mit dieser Spalte verbunden sind. Sie können Wege finden, um die Spalte zu umgehen, aber was ist, wenn Sie den falschen Datentyp, die falschen Nulleinstellungen und die falsche Indexdefinition verwendet haben? Schlimmer noch, wenn die Spalte nicht zur Tabelle gehören sollte oder wenn Ihnen eine Schnittpunkttabelle fehlt? Ich denke, jemand muss für die geschäftlichen Auswirkungen der Definition neuer Daten verantwortlich sein, und jemand sollte für die Auswirkungen einer Datenbankänderung auf den Code verantwortlich sein (außer dem DBA). Die 2 Rollen können von derselben Person gespielt werden.
NoChance
Fordern Sie den DBA auf, in seiner eigenen Niederlassung zu arbeiten. Geben Sie ihnen keine Checkout-Rechte für den Hauptentwicklungszweig. Erstellen Sie alternativ Ihren eigenen Entwicklungszweig und führen Sie Ihre Änderungen nach Bedarf zusammen.
SoylentGray

Antworten:

11

Martin Fowler und Pramod Sadalage haben einen ausgezeichneten Artikel zu diesem Thema geschrieben.

Jeder Entwickler hat seine eigene Datenbank, an der Änderungen vorgenommen werden können. Diese Änderungen werden dann (als Änderungssatz) an den DBA zurückgemeldet, der sie in der Master-Datenbank implementiert. Er ist also weiterhin in den Prozess involviert und kennt die Strukturen und Anforderungen der Datenbank wahrscheinlich sowieso am besten. Ich denke, das ist der beste Ansatz, da er für alle am Prozess beteiligten Personen zufriedenstellend und auch sehr agil ist.

Sie können den DAL auf ähnliche Weise ändern. Nehmen Sie einfach Ihre Änderungen vor und stellen Sie dem DBA ein Änderungsset zur Verfügung, wenn Sie glauben, dass Sie fertig sind, damit er es überprüfen und in seinen Master einbinden kann.

Falke
quelle
1
oooh ich mag ... das ist mein erstes Q hier, also kann ich noch nicht upvoten, aber du hast sicher einen Comin ... vielleicht / wahrscheinlich auch die Antwort, aber ich warte gerne ein bisschen, um zu sehen, was andere Leute sagen
spaghetticowboy
Das Problem dabei ist, dass der Entwickler seine gesamte Arbeit unter der Annahme ausführt, dass die Datenbank genehmigt wird.
HLGEM
@HLEGM: Nach meiner Erfahrung ist dies ein seltener Fall. In den meisten Fällen wird der DBA dies genehmigen oder nur geringfügig ändern. Es ist immer noch besser, als müßige Entwickler herumzusitzen. Darüber hinaus wird es wahrscheinlich zur besten Lösung führen, wenn sowohl der DBA als auch der Entwickler vernünftige Leute sind.
Falcon
+1 für die Erklärung, warum dies ein ausgezeichneter Artikel ist, anstatt nur einen Link zu veröffentlichen.
JeffO
@HLGEM - Ich denke, es erfordert, dass beide Parteien begründen, was sie tun. Der DBA sollte den Zweifel in DB-Angelegenheiten nutzen, aber beide müssen sich an jemand anderen wenden, der die endgültige Entscheidung treffen würde.
JeffO
3

Nun ja, wenn ich das DBA-Ding mache, ist bekannt, dass ich alles einsperre, damit die verdammt schmutzigen Programmierer ihre Mits nicht drauf bekommen. Jeder glaubt zu wissen, wie man es besser macht, und sie "optimieren" Dinge, um sie sich leichter zu machen, und es verursacht ein unheiliges Durcheinander.

Die andere Alternative besteht darin, es weit zu öffnen und die Programmierer eine Weile im Nahkampf zu lassen, dann einzuspringen und Ordnung zu schaffen, wenn die Dinge zu Ende gehen ... Dies ist sicherlich "agiler", aber es kann sein Ein wahrer Albtraum, je nachdem, was herausgeschnitten oder geändert werden muss ... Datenbankadministratoren haben oft ein besseres Verständnis für das gesamte Projekt, und einige Änderungen, die harmlos erscheinen, können problematisch sein.

Wenn er der einzige Gatekeeper sein will, muss er entweder eine feste Spezifikation haben oder in der Lage sein, seine Vision an den Rest der Entwickler zu "verkaufen".

Satanicpuppy
quelle
wir sind verdammt dreckig ... und manchmal sind wir auch verdammt ungeduldig und müssen die Dinge selbst erledigen
spaghetticowboy
@spaghetti: Ja ... ich bin wahrscheinlich schlechter als die meisten anderen, weil ich viel DBA-Arbeit geleistet habe, also habe ich zweimal das "Ich weiß, wie ich es besser machen kann!" als die meisten Programmierer. Ich werde dies sagen: Bei Datenbanken ist es viel wichtiger, es frühzeitig richtig zu machen ... Wenn Sie bis spät in das Projekt hinein hinzufügen, wird es mit ziemlicher Sicherheit Probleme verursachen.
Satanicpuppy
3

Es gibt ein Hauptproblem, das jedes andere Problem ersetzt:

  1. Warum hat der Auftragnehmer immer haben Sie den Code ausgecheckt?

Warum darf er das tun? Niemand sollte eine Datei auschecken lassen, es sei denn, er nimmt aktiv Änderungen vor. Es sollte eine Teamrichtlinie für Kassen geben.

Der Auftragnehmer (ob er es mag oder nicht) arbeitet als Teil eines Teams, und manchmal müssen andere Mitglieder des Teams Änderungen vornehmen. Dies ist ein Kommunikationsproblem. Leider gibt es keine automatisierte Möglichkeit, dieses Kommunikationsproblem zu beheben.

George Stocker
quelle
1

Anstelle von horizontalen Schichten arbeite ich lieber in schichtübergreifenden Silos.

Auf diese Weise kann keine Person / kein Team auf diese Weise blockieren.

Dies bedeutet auch, dass Ihre Entwickler über vielfältige Kenntnisse verfügen und sich viel einfacher in Funktionen bewegen können.

Natürlich gibt es Abschnitte (UI-Design und DB-Design), die möglicherweise mehr Spezialarbeit erfordern, aber Sie haben die Idee.

ozz
quelle
1

Einfach, wenn Sie es noch nicht getan haben, sollten Sie 3 Umgebungen haben:

  • Entwicklungsumgebung
  • QS-Umgebung
  • Produktionsumfeld

Die Entwicklungsumgebung sollte von Ihren Entwicklern verwaltet werden.

Möglicherweise möchten Sie auch eine RC-Umgebung hinzufügen.

Eine andere Antwort: Wenn mehrere Umgebungen nicht möglich sind, können Sie sich gegen ein verspottetes Repository entwickeln. Auf diese Weise erstellen Sie Ihre Modelle, und Ihr Auftragnehmer ist dafür verantwortlich, dass Ihre Modelle mit der Datenbank übereinstimmen. In gewisser Weise ist dies besser, da Ihre Entwickler sich keine Sorgen mehr um die Datenbank machen müssen.

AJC
quelle
1
Das OP spricht von Code, der ausgecheckt ist. Unterschiedliche Umgebungen hätten keine Auswirkungen.
NotMe
1

Ihr Problem scheint mir ein Problem der Arbeitskräfte zu sein. Es ist angemessen und notwendig, dass alle potenziellen Änderungen an der Datenbank von einem Datenbankspezialisten genehmigt werden. Wenn die aktuelle Person nicht rechtzeitig mit der Arbeit Schritt halten kann, benötigen Sie mehr Datenbankspezialisten.

HLGEM
quelle
+1: Dies kann auch eine Ursache für das Problem sein. Viele Unternehmen haben zu wenige Datenbankadministratoren.
Falcon
1

Dies ist sowohl ein Managementproblem als auch ein technisches.

Es gibt sicherlich triftige Gründe für einen DBA (unabhängig davon, ob vor Ort oder außerhalb, Auftragnehmer oder Mitarbeiter), Entwickler davon abzuhalten, Datenbankänderungen jeglicher Art vorzunehmen.

Das Hauptproblem, das Sie definiert haben, ist jedoch die Verfügbarkeit. Weiß Ihr Manager, dass Zeit / Geld damit verschwendet wird, auf diese Person zu warten? Wenn nicht, möchten Sie vielleicht erwähnen, wie alle herumsitzen.

Nicht ich
quelle