Ist das Zeitalter der Domänenlogik in Datenbanken vorbei? [geschlossen]

9

Ich bin kürzlich auf diese Meinung aus dem Jahr 2016 gestoßen , dass es in der Datenbank immer noch Argumente für Domänenlogik gibt.

Ich fand das total veraltet. Ich frage mich nur, ob der Typ noch in den 90ern lebt oder ob das wirklich wahr sein kann. Legacy-Systeme beiseite legen.

Was ist mit der Domänenlogik in der Datenbank aufgrund von Sicherheitsanforderungen? Ist das wirklich eine Sache zu tun?

ps-aux
quelle
3
Haben Sie diesen Artikel tatsächlich vollständig gelesen? Ich denke, der Autor macht seinen Standpunkt sehr gut klar und erklärt, für welche Teile der BL er seiner Meinung nach am besten in einer Datenbank platziert ist und für welche Teile nicht. Mit welchen Punkten aus diesem Artikel haben Sie genau zu kämpfen?
Doc Brown
Ja, es wurde am 18. Februar 2009 geschlossen und ist jetzt falsch.
Michael Durrant
Es ist neugierig. Ich habe diesen Typen gelesen und viele SQL-Beispiele gegeben (stark an Oracle gebunden), und dann kann ich es nicht vermeiden, mich daran zu erinnern, dass mein Kunde mir gesagt hat: Ich habe vergessen, die Oracle-Lizenz für die PRE-Umgebung zu kaufen. Wir haben es für PRO, aber nicht für PRE. Sie müssen die App für eine Weile gegen MySQL in PRE und Oracle in PRO bereitstellen ... Ich werde diesen Typen fragen, wo all die Shinny-Funktionen von Oracle jetzt hingehen ... (Problem hier war das aus einem Grund Ich möchte nicht wissen, dass der Architekt beschlossen hat, anstelle von Orm eine native SQL-Zeilenzuordnung zu verwenden, aber immer noch dem Problem nahe ist, an den DB-Anbieter gebunden zu sein .
Laiv
@Laiv: Das ist verrückt und keine Menge an ORM oder anderen Abstraktionen wird dich retten. Grundsätzlich stellen Sie mit einem solchen Setup nicht getesteten Code für die Produktion bereit.
JacquesB
2
"Ist das Zeitalter der Domänenlogik in Datenbanken vorbei?" Gott, ich hoffe es.
Lunchmeat317

Antworten:

13

Programmierer scheinen heutzutage sehr dogmatisch zu denken, besonders wenn sie die Gedanken lesen, die andere Leute in ihren Blogs schreiben.

Nehmen wir zum Beispiel Bob Martins Clean Coding-Blog. Als allgemeine Beobachtung finde ich Bob Martins Schriften ziemlich klar und klar, so dass es mich verblüfft, dass die Leute ständig durch die Dinge verwirrt werden, die er schreibt, wie zum Beispiel die SOLID-Prinzipien. Sie werden aufgehängt, was eine "Einzelverantwortung" sein sollte oder warum eine Klasse gegen Liskovs Prinzipien verstößt, wenn sie wahrscheinlich einfach danach streben sollten, besseren Code zu schreiben und zuerst etwas Erfahrung zu sammeln, damit das, was sie einlesen Blogs haben einen gewissen Kontext.


Grundsätzlich sagen Sie, dass die Datenbank Tabellen und Daten enthalten sollte, und das ist alles, was sie enthalten sollte. Aber Datenbanken sind einzigartig geeignet, um bestimmte Dinge zu tun, in denen ... Datenbanken gut sind.

Der Artikel zitiert diese Dinge:

  • Datenintegrität und -validierung (z. B. null und eindeutige Einschränkungen)
  • Sicherheit auf Zeilenebene
  • Schreiben einer API mit gespeicherten Prozeduren
  • Salden berechnen
  • Stellen der Datenbankfragen (dh Abfragen und Berichten)
  • Vermeiden von ORM-Problemen wie N + 1

als geeignete Dinge zum Einfügen in die Datenbank. Ich stimme ihm zu.

Gründe, warum Sie Geschäftslogik (im Allgemeinen) nicht in eine Datenbank einfügen:

  • Lieferantenbindung
  • Ihre Datenbank ist nicht die zentrale Behörde
  • Ihr Team denkt nicht relational
  • Minderwertiges Werkzeug.

Diese Dinge gelten jedoch im Allgemeinen nur für jene Techniken, Werkzeuge und Schulungen, für die die Datenbank nicht eindeutig geeignet ist.

Wie bei jeder anderen Technik in der Softwareentwicklung kommt es darauf an. Sie bewerten Ihre Alternativen und treffen Ihre Entscheidung auf der Grundlage der Ihrer Meinung nach bestmöglichen Vorgehensweise für Ihre spezifische Anwendung.

Robert Harvey
quelle
3
Eine sehr gute Aufschlüsselung und eine bessere Möglichkeit, die Frage zu formulieren.
candied_orange
9

Geben Sie hier die Bildbeschreibung ein

Das Zeitalter von Pferd und Buggy ist vorbei, aber Sie können immer noch Buggy-Peitschen kaufen.

Warum? Wenn Autos schneller und billiger zu warten sind und ihre Vernachlässigung keine Besuche der humanen Gesellschaft hervorruft, warum gibt es dann immer noch Pferdewagen?

Denn manchmal haben Sie neben den populären Gründen auch andere Gründe, etwas zu tun.

Was Sie lernen sollten, ist, warum Domänenlogik in einer Datenbank Probleme verursacht und was möglicherweise jeder daraus machen könnte. Dann entscheide dich selbst.

Meine persönliche Meinung:

In der Domänenlogik geht es um Verhalten. In Datenbanken geht es um Persistenz, Beziehungen und Daten. Wenn Sie es so sehen, sollten Geschäftsregeln nicht in der Datenbank enthalten sein.

Auf der anderen Seite, wer, sagte die Datenbank konnte kein Verhalten haben? Ich habe Office-Datenbanken mit Filemaker erstellt. Die Leute nennen es eine Datenbank, aber es ist auch eine ganze Anwendungsentwicklungsumgebung. Alles nahtlos in eine integriert und als Datenbank bezeichnet.

Wizdom findet man normalerweise zwischen extremen Ansichten. Ich habe keinen Zweifel, dass auch zur Arbeit gebracht werden könnte. Wenn man versucht, die Mitte zu finden, ist es verlockend, einfach der Herde zu folgen. Ich werde hier davor warnen.

Ein System, das die Domänenlogik in der Datenbank hält, kann gut funktionieren. Ein System, das die Domänenlogik aus der Datenbank heraushält, kann gut funktionieren. Ein System, das Domänenlogik an beiden Orten mischt, wird mich verrückt machen. Ich werde nicht wissen, wo ich neues Verhalten anbringen soll. Ich bin mir nicht sicher, wo ich altes Verhalten finden kann.

Wenn Sie sich immer noch nicht entscheiden können, werfen Sie eine Münze und treffen Sie ihre Entscheidung als Evangelium für ein bestimmtes Projekt. Soweit ich das beurteilen kann, weiß diese Münze genau wie jeder andere, was am besten ist.

candied_orange
quelle
1
Ihre Antwort klingt so, als hätten Sie nicht einmal einen Blick in den vom OP verlinkten Artikel geworfen (nicht, dass ich sage, dass der Autor richtig oder falsch ist), aber können Sie uns sagen, wo Sie den in diesem Artikel beschriebenen Ansichten zustimmen oder sich von diesen unterscheiden?
Doc Brown
@ DocBrown Ich habe es auch nicht gelesen, aber diese Antwort ist trotzdem eine gute, bei der ich voll und ganz zustimmen würde. Und es geht um die Frage des OP (letzter Satz), nicht um einen zitierten Artikel.
qwerty_so
@DocBrown Ich glaube nicht, dass der Artikel den Artikel von Onkel Bob gelesen hat, in dem er zitiert : "Plugin-Architekturen sind sehr robust, da stabile Geschäftsregeln mit hohem Wert nicht von flüchtigen Modulen mit geringem Wert wie Benutzeroberflächen und Datenbanken abhängen können." Onkel Bob hat stärkere Ansichten gegen diese Idee als ich. Dieser Artikel greift Kirschs Artikel auf und lässt es so aussehen, als würde Bob etwas sagen, was er nicht ist.
candied_orange
2

Ich hatte einen Fall, in dem das Lösen in der Geschäftsschicht ein echter Leistungskiller gewesen wäre.

Unser Anwendungs-OO-Sicherheitskonzept besteht aus Rollen UND Gruppen. Und beide sind rekursive Strukturen. Wir haben eine gespeicherte Prozedur geschrieben, die die Berechtigung für einen Benutzer für ein Domänenobjekt auflöst.

Es gibt wirklich weniger Bedürfnisse, auf die Datenbanklogik zurückzugreifen. Aber in diesem Fall habe ich mich für diesen Weg entschieden. Aber was Sie immer beachten müssen: Sie geben die Abstraktion auf. Sobald Sie Geschäftslogik in der Datenbank haben, fällt es Ihnen schwer, Ihre Persistenzschicht zu ändern. Sei also sehr sehr vorsichtig.

oopexpert
quelle