5 Stimmen

C++ MVC-Modell - Wie sollte es implementiert werden?

Ich bin etwas verwirrt, wie das Modell in meiner grundlegenden C++-Implementierung "funktionieren" sollte, bzw. wie die Daten aus dem Datenbank-Backend gekapselt/verarbeitet werden sollten.

Meine Gedanken im Moment sind für ein Modell mit zum Beispiel eine statische findById()-Methode, die eine Instanz des gleichen Modells zurückgeben würde, die dann eine einzelne "Zeile" von Daten (erlaubt Manipulation usw. usw.) darstellen würde könnte ein geeigneter Ansatz sein.

Im Hinblick auf die Erstellung einer neuen Zeile in der Datenbank, nehme ich an, eine neue Instanz des Modells erstellt werden würde, mit Daten gefüllt, und effektiv eine save()-Methode aufgerufen?

Ich hoffe, ich bin auf dem richtigen Weg, aber ich bin ein wenig verwirrt über die Umsetzung / Design hier.

1 Stimmen

Wovon reden Sie überhaupt?

0 Stimmen

Ich fürchte, im Moment ist es nicht verständlich, was Ihr Problem ist. Ich vermute, Sie entwerfen eine Art von MVC-Framework, das mit C++ verwendet werden soll. Aber es ist nicht wirklich klar, was Sie tun, für welche Zwecke, in welchem Stadium Sie sich befinden und was genau Ihr aktuelles Problem ist. Können Sie das bitte näher erläutern?

0 Stimmen

Hm. Ich verstehe das Prinzip der MVC, und was es ist das Modell soll erreichen - es ist mehr eine Frage, welche Art von Schnittstelle sollte das Modell haben. Dh sollte Abfrage für Daten über statische Methoden sein, und dann Instanzen des Modells repräsentieren einzelne "Zeilen" von Daten? Hoffentlich bringt das etwas Klarheit ^^;...

4voto

Darryl Punkte 5512

Ich denke, Sie fragen, welche Art von Schnittstelle geeignet wäre, um zwischen einer relationalen Datenbank und einer objektorientierten Anwendung zu "übersetzen", insbesondere im Zusammenhang mit einer in C++ geschriebenen MVC-Anwendung.

Ein gängiger Ansatz ist das sogenannte objektrelationale Mapping, oder ORM . Ich bin nur damit vertraut, wie Ruby on Rails ORM implementiert, aber wenn man es auf C++ überträgt, sieht es wie folgt aus:

  • Eine Datenbanktabelle entspricht einer Klasse
  • Operationen auf einer Tabelle (z. B. Abfragen) werden auf statische Mitgliedsfunktionen der entsprechenden Klasse abgebildet
  • Die Zeilen in einer Tabelle entsprechen den Instanzen der entsprechenden Klasse
  • Die Felder in einer Tabelle entsprechen den Mitgliedsvariablen der entsprechenden Klasse

Wahrscheinlich gibt es C++-Bibliotheken, die die ORM-Zuordnung für Sie übernehmen. Ich bin nicht vertraut mit allen selbst, da ich noch nie hatte, dies in C++ zu tun.

Editar: Diese Frage fragt nach ORM-Bibliotheken für C++.

1voto

Tobias Langner Punkte 10350

Erster Rat: das "Gang of Four"-Buch - Design Patterns von Gamma et al. Es erklärt MVC und das andere notwendige Muster: Observer.

Auch Wikipedia könnte hilfreich sein.

Grundsätzlich gilt: Das Modell repräsentiert die Daten und die Möglichkeiten, sie zu manipulieren. Es ist eine Klasse. Das Modell darf weder den View noch den Controller kennen. Es muss Möglichkeiten haben, andere über Änderungen zu informieren, ohne sie zu kennen (Observer Pattern, Signale in QT zum Beispiel). Der View zeigt die Daten an und reagiert auf Änderungen. Sie registriert sich als Beobachter für das Modell und kennt das Modell in den meisten Fällen (keine Notwendigkeit, dort zu entkoppeln). Mehrere Views können das gleiche Model verwenden. Dasselbe gilt für den Controller. Bei den meisten modernen UIs sind View und Controller eng gekoppelt, manchmal sogar das gleiche Objekt (z.B. ein Schieberegler, der einen Wert anzeigt und ihn gleichzeitig durch Verschieben verändert).

Aus historischen Gründen: Smalltalk lernen (zum Beispiel Cincom Smalltalk).

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