Sollten wir zuerst eine Entity-Relationship-Modellierung oder eine objektorientierte Modellierung durchführen?


9

Sollte ich beim Erstellen einer Anwendung von Grund auf mit dem objektorientierten Modell (OO) oder dem Entity-Relationship-Modell (ER) beginnen?

Antworten:


13

Vielleicht möchten Sie versuchen, das Prinzip der Verzögerung von Architekturentscheidungen so lange wie möglich einzuhalten. Der Gedanke ist, dass Sie in Zukunft mehr über Ihre Problemdomäne wissen werden als jetzt - daher sind alle Entscheidungen, die Sie heute treffen, verdächtig.

Ein weiteres gutes Prinzip, um dies zu kombinieren, könnte sein, zuerst zu versuchen, die riskantesten Teile Ihrer Anforderungen zu versuchen - der Gedanke ist, dass Sie, wenn Sie die einfachen Teile machen, dann feststellen, dass die riskanten Teile Sie in eine andere Richtung bewegen, dies nicht tun die einfachen Teile zu wiederholen. Riskant bedeutet hier Dinge, bei denen Sie sich nicht sicher sind, wie Sie sie tun sollen.

Angesichts dieser beiden Faktoren und der Tatsache, dass ich häufig versuche, Dinge aus einer OO-Perspektive zu betrachten, könnten Sie versuchen, zuerst mit einem OO-Modell der riskantesten Teile Ihrer Anwendung zu beginnen und eine möglichst geringe Menge an Code zu implementieren, die die Anforderungen erfüllt riskante Anforderungen. Erweitern Sie dann Ihr OO-Modell nach Bedarf, um die Funktionen hinzuzufügen, die Sie benötigen. Währenddessen können Sie Ihre Entscheidung über die Verwendung von SQL oder NoSQL oder Flatfiles oder Cloud-Speicher oder was auch immer vollständig verzögern ... und Sie werden möglicherweise feststellen, dass Sie überhaupt keine relationale Beziehung wünschen (wodurch die Notwendigkeit eines ER-Modells entfällt).


7

Das ER-Modell bestimmt, wie die Daten der Anwendung beibehalten werden, und das OO-Modell entscheidet, wie dieselben Daten im Speicher gespeichert werden oder während die Anwendung ausgeführt wird. Das Datenbankschema-Design (ER-Modell) und das Klassenstruktur-Design (OO-Modell) sind also verwandte Entwurfsüberlegungen und können normalerweise sogar gleichzeitig berücksichtigt werden. Wenn Sie ein ORM- Tool (Object Relational Mapping) verwenden, sind Ihr ER-Modell und Ihr OO-Modell möglicherweise identisch. Mit anderen Worten, Ihre Klassen (OO-Modell) können so mit Anmerkungen versehen werden, dass sie selbst das ER-Modell angeben.

Stellen Sie jedoch vor dem Entwerfen sicher, dass Sie eine sehr gute Vorstellung von den tatsächlichen Anforderungen der Software haben, wofür sie verwendet wird, wie sie verwendet wird und wer sie verwendet. Viele Entwickler beginnen, über Entwurfsentscheidungen nachzudenken, bevor sie die Anforderungen des Produkts vollständig verstehen, und erhalten ein Design, das für den eigentlichen Zweck der Anwendung nicht geeignet ist.


+1 zur Identifizierung des Unterschieds zwischen den beiden Modellierungstypen. Ich stimme nicht ganz zu, dass Sie gleichzeitig über die beiden Modelle nachdenken können. Einige OO-Fans sind außerdem der Meinung, dass Ihre OO- und ER-Modelle nicht immer gleich sein sollten. Ein OO-Modell kann jedoch als Grundlage für das Datenbankdesign verwendet werden, aber diese Transformation ist etwas schwierig.
NoChance

@EmmadKareem Sie haben Recht, es ist nicht immer angebracht, an die beiden Modelle gleichzeitig zu denken. Ich habe in Bezug auf die Idee gesprochen, ein ORM zu verwenden und Klassen zu kommentieren, damit das ER-Modelldesign sozusagen in das OO-Modell integriert wird. Einige Leute entscheiden sich dafür, Anwendungen auf diese Weise zu entwickeln, was im Wesentlichen bedeutet, dass sowohl OO als auch ER gleichzeitig implementiert werden.
CFL_Jeff

Verwechseln Sie Ihr Domänenmodell nicht mit einem Datenmodell - Verwechseln Sie ein Objekt (das eine einzelne Instanz darstellt) nicht mit einer Datenbanktabelle (die eine Sammlung von Dingen enthält)
Narender Parmar
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.