Ist die Schaffung eines „Dummy-Datensatz“, um Kraft-Datenbasis obey der Business-Logik, eine gute Idee oder ein Stumme?

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

Frage

In einigen Projekten, die ich sehe, dass eine Dummy-Aufzeichnung benötigt wird, in Db zu schaffen, um auf die Geschäftslogik gehen zu halten, ohne die Db Zwänge zu brechen.

Bisher habe ich seine Verwendung auf 2 Arten gesehen:

  • Durch ein Feld wie IsDummy Hinzufügen
  • Durch das Hinzufügen eines Feldes etwas namens Objecttype, die eine Art Punkte: Dummy

Ok, es hilft, auf was muss erreicht werden.

Aber was macht mich Alarm auf solche Lösungen ist manchmal muss man im Auge behalten, dass einige Dummy-Datensätze in der Anwendung vorhanden sind, die in einigen Prozessen behandelt werden muss. Wenn nicht, stellen Sie einige Probleme, bis Sie ihre Existenz erkennen oder bis jemand im Team Sie sagt „ Aha! Sie haben die Dummy-Aufzeichnungen vergessen. Sie auch tun sollten ...

Die Frage ist also: Ist es eine gute Idee, Dummy-Datensätze erstellen Business-Logik zu halten, wie es, ohne dass der Db beklagen ist? Wenn ja, was ist die beste Praxis Entwickler zu verhindern, dass das Überspringen ihre Existenz? Wenn nicht, was tun Sie, dich daran zu hindern, in einer Situation fallen, wo Sie mit einer einzigen Möglichkeit der Schaffung eine Dummy-Aufzeichnung am Ende?

Danke!

War es hilfreich?

Lösung

Dummy-Aufzeichnungen Mit schlechter ist als die Zwänge immer richtig.

Es gibt oft eine Versuchung, sie zu benutzen, weil Aufzeichnungen Dummy mit wie der schnellsten Weg, scheint eine neue Funktion zu liefern (und vielleicht auch manchmal, es ist), aber sie sind nie Teil eines gut Design, weil sie sich verstecken Unterschiede zwischen Ihrer Domänenlogik und Datenmodell.

Andere Tipps

Dummy Aufzeichnungen sind nur erforderlich, wenn der Modellierer nicht leicht die Datenbankdefinition ändern kann, was bedeutet, die Definition und / oder das Datenmodell ist ziemlich schlecht. Man sollte nie in einer Situation kommen, wo es hat spezieller Code in der App-Schicht sein, spezielle Fälle in der Datenbank zu handhaben. Das ist eine garantierte Wartung Alptraum.

Jede gute Definition oder Modell wird Änderungen erlauben leicht, ohne „zu beeinflussen vorhandenen Code“.

Alle Geschäftslogik [die in der Datenbank definiert ist] sollte ANSI SQL Einschränkungen implementiert werden, indem, Schecks und Regeln. (Natürlich Untere Ebene Strukturen sind bereits über Domains / Datentypen usw. eingeschränkt, aber ich würde sich als „Geschäftsregeln“ nicht klassifizieren.) Ich stelle sicher, dass ich Attrappen nicht am Ende zu implementieren, einfach durch das zu tun.

Wenn das nicht getan werden kann, dann mangelt es dem Modellierer Wissen und Erfahrung. Oder höhere Level-Anforderungen wie Normalisierungs, gebrochen worden sind, und dass präsentiert Hindernisse zu Einschränkungen der Umsetzung, die von ihnen abhängig sind; auch bedeutet, die Modellierer gescheitert.

Ich habe noch nie zu brechen solche Einschränkungen erforderlich, oder Datensätze hinzufügen Dummy (und ich habe auf eine Menge von Datenbanken gearbeitet). Ich habe Dummy-Aufzeichnungen entfernt (und Duplikate), wenn ich Datenbanken von anderen erstellt wurden überarbeitet.

Ich habe noch nie über mit, dies zu tun laufen. Wenn Sie dies tun müssen, es ist etwas falsch mit Ihrer Datenstruktur, und es wird zu Problemen führen, weiter auf der ganzen Linie für die Berichterstattung ...

Mit Dummies ist stumm.

Generell sollten Sie versuchen, Ihre Logik Recht vor, ohne sie zu bekommen. Ich habe sie auch gesehen verwendet, aber nur als Notlösung. Ihre Beschreibung klingt viel zu viel, wie es eine gängige Praxis zu machen. Das würde mehr Probleme verursachen als sie löst.

Der einzige Grund, warum ich für das Hinzufügen von „Dummy“ Aufzeichnungen sehen kann, ist, wenn Sie ein ernsthaft schlechte App und Datenbank-Design haben.

Es ist definitiv nicht gängige Praxis.

Wenn Sie Ihre Business-Logik ist abhängig von einem Datensatz vorhandenen dann müssen Sie eines von zwei Dingen tun: Entweder stellen Sie sicher, dass eine korrekte Aufzeichnung vor erstellt wird diese Logik auf die Ausführung; oder die Logik ändern Informationen zu berücksichtigen, fehlt.

Ich denke, jede Situation, wo etwas ist nicht sehr leicht zu unterscheiden als „Business-Logik“ ist eine Ursache für den Versuch, einen besseren Weg zu denken.

Die Tatsache, dass Sie erwähnen „die eine Art Punkte: Dummy“ führt mich zu glauben, dass Sie irgendeine Art von ORM verwenden für Ihre Datenzugriffs Handhabung. Eine sehr gute Kontrollpunkt (wenn auch nicht die einzige) für ORM Lösungen wie NHibernate ist, dass Ihr Quellcode sehr deutlich Ihre Datenstrukturen Fahren Ihre Anwendung beschreibt. Dies ermöglicht nicht nur Ihre Daten zugreifen leicht unter Quellcodeverwaltung verwaltet werden, sondern erlaubt es auch für eine einfachere Fehlersuche auf der ganzen Linie sollte ein Problem auftreten (und seien wir ehrlich, es ist nicht eine Frage der, wenn ein Problem auftritt, aber wenn).

Wenn Sie irgendeine Art von „Krücke“ wie ein Dummy-Datensatz einführen, werden Sie den Punkt einer Datenbank zu ignorieren. Eine Datenbank ist es Regeln gegen Ihre Daten zu erzwingen, in dem Bemühen, die Notwendigkeit für diese Art der Sache zu beseitigen. Ich empfehle Ihnen, einen Blick auf Ihre Anwendungslogik FIRST, bevor Sie auf diese Art von Technik zurückgreifen. Denken Sie an Ihre Kollegen Devs oder eine Neueinstellung. Was passiert, wenn sie eine Funktion, und vergessen Sie Ihre kleinen „dummy record“ Logik hinzufügen müssen?

Sie erwähnen Sie sich in Ihrer Frage Gefühl Besorgnis. Gehen Sie mit Ihrem Darm. Lassen Sie sich von den Dummy-Aufzeichnungen befreien.

Ich habe hier mit dem gemeinsamen Gefühl gehen und argumentieren gegen Dummy-Aufzeichnungen.

Was passiert, ist, dass ein neuer Entwickler nicht über sie wissen und Code nicht mit ihnen zu umgehen, oder eine Tabelle löschen und vergessen in einem neuen Dummy-Datensatz hinzufügen.

Ich habe sie in Legacy-Datenbanken erfahren und haben beide die oben genannten geschehen gesehen.

Auch je länger sie existieren desto schwieriger ist es, sie zu nehmen und desto mehr Code, den Sie schreiben müssen Berücksichtigung dieser Dummy-Aufzeichnungen zu nehmen, die wahrscheinlich entfernt werden können, wenn Sie nur, ohne sie den ursprünglichen Entwurf hat.

Die richtige Lösung wäre, um Ihre Geschäftslogik zu aktualisieren.

Ihre erweiterte Erklärung zu zitieren:

Angenommen, Sie ein Paket zum Gegenstand haben, und Sie haben eine Geschäftslogik zu implementieren, dass ein Paket ohne Inhalt kann nicht erstellt werden. Sie erstellt einige Regeln Business-Schicht und entwickelt, um Ihre Db mit entsprechenden Einschränkungen. Aber nach einigen Jahren eine neue Funktion angefordert und zu erreichen, dass Sie in der Lage sein müssen, ein Paket zu erstellen, ohne eine contnent. Um dies zu überwinden, entscheiden Sie einen Dummy-Inhalte zu erstellen, die nicht sichtbar auf UI ist aber können Sie ein leeres Paket erstellen.

So ist das auf einmal zu einem Paket w / o Inhalt ungültig wurde somit Business-Schicht Existenz von Inhalten in einem Paketobjekt erzwungen. Das macht Sinn. Nun, wenn das reale Welt Szenario so verändert hat es jetzt eine Notwendigkeit triftiger Grund zu schaffen Paketobjekte ohne Inhalt ist die Business-Logik-Schicht, die geändert werden muss.

Fast überall mit „Dummy“ alles überall ist eine schlechte Idee und zeigt in der Regel ein Problem bei der Umsetzung. In diesem Fall sind Sie mit Dummy-Daten „Compliance“ mit einer Business-Schicht zu ermöglichen, die genau nicht mehr die realen Welt Zwänge des Unternehmens darstellen.

Wenn Paket ohne Inhalt nicht gültig ist dann Dummy-Daten „Compliance“ mit Business-Schicht zu ermöglichen, ist eine törichte Hack. Im Wesentlichen schreiben Sie Regeln Ihr eigenes System zu schützen, und dann, wie versuchen, Ihren eigenen Schutz zu umgehen. Auf der anderen Seite, wenn die Verpackung ohne Inhalt gültig ist dann Business-Schicht sollte nicht falsche Zwänge werden erzwingen. In keinem Fall ist Dummy-Daten gültig sind.

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