2016-12-09 1 views
0

Ich lese Clean Code von Robert Martin und es gibt ein Kapitel namens "Objects and Data Structures", das beschreibt, wie eine Klasse entweder eine Datenstruktur oder ein Objekt sein sollte. Das Wesentliche ist:Sind Modelle Objekte oder Datenstrukturen?

  • „Objekte ihre Daten hinter Abstraktionen verbergen und Funktionen aussetzen auf ihre Daten arbeiten“
  • „Datenstrukturen aussetzen ihre Daten und haben keine sinnvolle Funktionen“

Es fährt dann fort um "Hybride" zu beschreiben, die "ein verworrenes Design anzeigen".

In einem Framework wie MVC stellt ein Modell normalerweise alle seine Eigenschaften zur Verfügung, enthält aber auch Funktionen, um mit seinen Daten zu arbeiten und Dinge zu tun (providing the model isn't just a class of properties). Ist dies nicht ein Modell, das eine hybride Struktur ist, oder bin ich etwas falsch?

Antwort

0

Ich habe Martins Clean Code-Videoserie gesehen und ich erinnere mich an ein Video, als er über die Entity-Boundary-Interactor-Struktur sprach. Er sagte, dass Entitäten (also im Grunde Ihre Modellklassen) nur anwendungsunabhängige Methoden haben sollten sind gültig, egal in welcher Anwendung sie verwendet werden.

Nehmen wir zum Beispiel an, Sie haben eine Klasse Line. Einige gültige Methoden (meiner Meinung nach) wären: getLength() - das ist so ziemlich das, worauf sich Martin bezieht, wenn er sagt, dass ich deine Daten hinter der Abstraktion versteckt habe, denke ich. Es sagt nichts über die tatsächlichen Start- und Endpunkte aus, sondern nur deren Abstand zueinander.

moveBy (double dx, double dy) - das wäre ein gutes Beispiel für eine Methode, die in jeder Anwendung gültig ist, da sie nur die Linie um ein spezifiziertes Delta verschiebt. Beachten Sie, dass dies nur für die Zeilendaten gilt und nichts mit dem Verschieben einer Zeile auf dem Bildschirm zu tun hat.

+0

Vielen Dank für Ihre Antwort, Die Sache, die ich nicht bekommen, ist, dass in der Modellklasse, wenn Entity Framework zum Beispiel, X und Y würde öffentliche Eigenschaften, die auf die Datenbank zuordnen. Dadurch werden nun die Details des Modells offen gelegt und eine hybride Struktur erzeugt. – Michael

+0

Eigenschaften in C# sind nur Syntaxzucker für Getter- und Setter-Methoden. Sie zählen nicht wirklich als echte Methoden. Sie fügen Ihrer Modellklasse kein Verhalten hinzu. Ihre Klasse hat also nur Methoden zum Abrufen oder Festlegen ihrer Attribute, was sie zu einer einfachen Datenstruktur macht. – Pox

+0

Aber Robert Martins Beschreibung einer Datenstruktur sagt, dass es keine sinnvollen Funktionen hat. GetLength() wäre sicherlich eine sinnvolle Funktion? – Michael