Frage

Mein Verständnis des MVC ist wie folgt (einhüllen es schrecklich falsch ist, ich bin afterall neu it)

  1. Modelle sind die Dinge, die Schnittstelle mit der Datenbank
  2. Ansichten sind das Design / Layout der Seite
  3. Controller ist, wo alles beginnt und ist im Wesentlichen die Seitenlogik

Ich bin mit CodeIgniter aber ich würde ahne, es ist nicht nur darauf beschränkt, oder vielleicht auch nur zu PHP-Frameworks.

Wo finde ich globale Klassen setzen?

Ich kann ein Modell für die Produkte haben und ich dann eine Abfrage, die 20 Produkte aus der Datenbank speichert. Ich jetzt Sie 20 Modelle machen oder sollte ich eine separate Klasse für sie, wenn dieser, wo ich diese Klasse setzen (andere Steuerungen müssen, es benutzen auch)

War es hilfreich?

Lösung

Modell ist das falsche Wort zu verwenden, wenn die Diskussion, was mit Produkten zu tun: Jedes Produkt ist ein Wertobjekt (VO) (oder Datenübertragung objet / DTO, was auch immer besser in dem Mund paßt). Wertobjekte haben in der Regel die gleichen Felder, die eine Tabelle enthält. In Ihrem Fall ProductVO sollte die Felder, die in Tabelle Products sind.

Modell ist ein Data Access Object (DAO) , die Methoden wie

hat
findByPk --> returns a single value object
findAll --> returns a collection of value objects (0-n)
etc.

In Ihrem Fall würden Sie eine ProductDAO haben, die so etwas wie die oben genannten Methoden hat. Diese ProductDAO würde dann wieder ProductVO die und Sammlungen von ihnen.

Data Access Objects können auch zurückkehren Business Objects (BO) , die mehrere VO ist und zusätzliche Methoden enthalten, die Unternehmen sind fallspezifisch.

Nachtrag: In Ihrem Controller rufen Sie eine ProductDAO die gewünschten Produkte zu finden. Der zurück ProductVO (n) wird dann zu der Ansicht geführt (als Anfrage-Attribute in Java). Die Ansicht dann in einer Schleife durch / zeigt die Daten aus den ProductVO Jahren.

Andere Tipps

Modell Teil Ihrer Anwendung ist, wo die Geschäftslogik geschieht. Modell stellt wirkliche Leben Beziehungen und Abhängigkeiten zwischen Objekten, wie: Mitarbeiterberichte an einem Manager-Manager überwachen viele Mitarbeiter, Manager kann Task Mitarbeiter zuweisen, sendet Task-out-Benachrichtigung, wenn überfällig. Modell kann und die meisten oft eine Schnittstelle mit Datenbank, aber dies ist nicht erforderlich.

ist im Grunde alles, was bei der Anzeige angezeigt oder helfen kann. Ansicht enthält Vorlagen, Vorlagenobjekte, Griffe Vorlage Zusammensetzung und Verschachtelung, Wraps mit Kopf- und Fußzeilen und erzeugt eine Ausgabe in einem der bekannten Formaten (X / HTML, sondern auch XML, RSS / Atom, CSV).

Controller ist eine Übersetzungsschicht, die Operationen zu modellieren Benutzeraktionen übersetzt. Mit anderen Worten, es sagt modellieren, was eine Antwort zu tun und zurückgibt. Controller-Methoden sollten so klein wie möglich sein, und alle Geschäftsprozesse sollten in Modell und Ansicht Logikverarbeitung sollte in View stattfindet erfolgen.

Nun, zurück zu Ihrer Frage. Es hängt wirklich, wenn Sie für jedes Produkt separate Klasse benötigen. In den meisten Fällen wird eine Klasse genügen und 20 Instanzen davon geschaffen werden. Da die Produkte der Geschäftslogik repräsentieren soll es gehört Teil Ihrer Anwendung zu modellieren.

CakePHP gibt es 3 weitere "Teile":

  1. Behaviors
  2. Komponenten
  3. Helfer

Logik, die von vielen Modellen verwendet werden, sollte als Verhalten gemacht werden. Ich weiß nicht, ob CodeIgniter diese Logik hat oder nicht, aber wenn es tut, würde ich versuchen, es als solches zu implementieren. Sie können über Verhaltensweisen lesen hier .

(Komponenten helfen Controller-Share-Logik und Helfer helfen Ansichten auf die gleiche Art und Weise).

Der einfachste Weg ist:

  1. Haben Sie eine Modellklasse pro Datenbanktabelle. In diesem Fall wäre es ein Objekt sein, das alle Produktdetails statt.
  2. Setzen Sie diese Klassen in einem Paket / Namensraum, beispielsweise com.company.model (Java / C #)
  3. Legen Sie die DAO-Klassen in einem Paket wie com.company.model.dao
  4. Ihre Ansicht verbrauchen Daten aus der Sitzung / Anfrage / Controller In diesem Fall würde ich eine Liste .
  5. Oh, Sie verwenden PHP. Weiß nicht, wie sich das ändert Dinge, aber ich glaube, es ein Kollektionen Framework wie jede moderne Sprache hat.

@Alexander erwähnt CakePHPs Verhalten Komponenten und Helfer . Diese sind hervorragend für die gemeinsame Funktionalität abstrahieren. Ich finde den Behaviors besonders nützlich, da natürlich die größten Teil der Geschäftslogik in den Modellen getragen wird. Ich arbeite derzeit an einem Projekt, wo wir haben Verhaltensweisen wie:

  • Abschließbare
  • Veröffentlichbar
  • Tagable
  • bewertbar
  • kommentierbaren

etc.

Für Code, der auch die MVC-Framework dh Code-Bibliotheken hinausgeht, die Sie für verschiedene Dinge verwenden, die nicht gebunden ist in den jeweiligen Rahmen Sie verwenden - in unserem Fall Dinge wie Video-Encoding-Klassen usw. CakePHP hat die Anbieter Ordner.

Alles, was effektiv nichts zu tun hat mit CakePHP dort geht.

ich vermute CodeIgniter nicht ganz so flexibel eine Struktur hat, es ist kleiner und leichter als CakePHP, aber ein kurzer Blick auf die CakePHP Handbuch zu sehen, wie Behaviors, Komponenten, Helfer und der Kreditoren-Ordner können hilfreich sein.

Es sollte eine einfache Sache sein, nur einige allgemeine Hilfsklassen sind aus Ihrer Modelle schön halten und DRY

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