3 Stimmen

Dieses Klassendesign ist zu nah an der Tabellenstruktur der Datenbank?

Ich habe eine Datenbank mit den folgenden Tabellen Artikel , Gruppen y GroupItems . Die Tabelle "Items" enthält die Einstellungen der einzelnen Elemente, die Tabelle "Groups" enthält die Definition einiger Gruppen und die Tabelle "GroupsItems" enthält die Verknüpfung der einzelnen Elemente mit den einzelnen Gruppen sowie das Datum, an dem das Element der Gruppe hinzugefügt wurde, und das Datum, an dem das Element entfernt wurde (falls vorhanden).

In meinem C#-Modell habe ich 3 Klassen:

  • class Item
  • class Group
  • class GroupItem

Die Klasse Group hat eine Sammlung von GroupItems, und jede GroupItem-Klasse enthält ein Item und das Datum, an dem es hinzugefügt oder entfernt wurde, falls vorhanden.

Ich bin nicht sicher, ob dies ein gutes Design ist oder ob ich die DB-Struktur in mein Anwendungsmodell verschiebe. Wäre es besser, wenn ich die beiden Daten direkt in die Klasse Item verschiebe und die Anzahl der Klassen um eine Klasse und damit die Softwarekomplexität reduziere?

Was meinen Sie dazu?

3voto

Tigran Punkte 60618

Wenn Sie können durch Entfernen der GroupItem Klasse und deren "Aufteilung" in Item in Ihrer Architektur, ist es eine gute Wahl. Das Einzige, was Sie beachten müssen, ist, dass Sie Ihre DB-Zuordnung an dieser Stelle neu anpassen müssen.

Die Wahl ist hier zwischen saubere Architektur Ihrer Anwendung und saubere Abbildung zwischen Ihrer Anwendung und der DB.

Ich persönlich würde mich für saubere Abbildung und lassen das Zeug so, wie es ist. Denn nach ein paar Monaten werden Sie sich nicht mehr daran erinnern, welches Bild wo gebunden wurde, und da Sie bereits relativ kohärentes Mapping zwischen Ihren code model y db model wird dazu beitragen, dass die alle Sachen leichter zu verstehen, imo .

1voto

ewernli Punkte 37122

Es scheint, als ob GroupItem ist eine qualifizierter Verband zwischen Group y Item .

Die Frage, die Sie sich stellen müssen, ist, ob Sie wirklich einen qualifizierten Verband brauchen oder nicht. Angesichts der sehr allgemeinen Namen Ihrer Unternehmen weiß ich das nicht. Es sind drei Fälle zu berücksichtigen:

  • Wenn ein Artikel nur von einer Gruppe gehalten wird, brauchen Sie keine qualifizierte Assoziation: Die Informationen (z. B. das Datum) in der Assoziation können in den Artikel verschoben werden. Es ist eine einfache eins-zu-viele Verein. Group hat eine Liste von Item und Sie brauchen keine zusätzliche Tabelle (die Tabelle für Item hat eine Fremdschlüssel an die Gruppe).

  • Wenn ein Gegenstand in mehrere Gruppen eingeteilt werden kann - was wohl der Fall ist -, dann kann man sich dafür entscheiden:

    • a many-to-many Verein. Jede Einheit ( Item o Group ) hat eine Liste von Entitäten der anderen Art.
    • a qualifiziert Vereinigung. Qualifizierte Verbände sind in der Regel vertreten mit einem HashMap ( Date , Item ), oder, wie Sie es getan haben, eine spezielle Sammlung von GroupItem .

Bei den beiden letztgenannten Varianten benötigen Sie eine zusätzliche Tabelle, um die Assoziation zwischen Group y Item auf der Ebene der Datenbank.

0voto

Anand Punkte 678

Jede Klasse hat eine eigene Tabelle, was eine gute Trennung des Konzepts ermöglicht. ORM wird für eine gute Architektur sorgen.

Und auch einige ausgereifte Orm-Tools wie NHibernate bietet verschiedene Arten der Klassenzuordnung wie Vererbung, Komposition, 1-1-Beziehung, 1-many-Beziehung usw. Es ist also besser, ORM-Tools für eine gute Domain Driven Development zu verwenden.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X