Frage

Vor kurzem Dank der Schienen, Popularität, viele Menschen beginnen mit activerecord-Modell.jedoch, bevor ich hörte, Schienen (meine peer-group, war nicht ein fan von open-source-Material, wir wurden gelehrt .NET Schule...) und während ich dabei war meine endgültige Jahres-Projekt, fand ich diese definition für ein Modell

Das Modell stellt enterprise-data-und business-Regeln, die Regeln den Zugriff auf und Aktualisierung der Daten.Oft ist das Modell dient als software-Annäherung an einen realen Prozess, so simple real-world modeling-Techniken anwenden, wenn Sie definieren das Modell.

es heißt nicht das Modell darstellen soll, einen Tisch als das, was activerecord tut.Und in der Regel innerhalb einer Transaktion, kann man Abfragen ein paar nicht verknüpfte Tabellen werden und dann manipulieren Sie beliebig Daten aus verschiedenen Tabellen...also, wenn activerecord verwendet wird, als Modell, dann entweder müsste man Stopfen alle Logik-code in der controller (das ist ein bisschen beliebt in einige php-frameworks), die es schwierig macht, zu testen, zu hacken oder den activerecord-Modell, so dass es führt eine Datenbank-operation auf, die nicht nur in der Tabelle zugeordnet, aber auch andere Verwandte Tabellen sowie...

also, was ist so toll über Missbrauch von (IMHO) activerecord-wie das Modell in einer MVC-Architekturmuster?

War es hilfreich?

Lösung

Martin Fowler beschrieben, dieses Muster in Patterns of Enterprise Application Architecture zusammen mit zwei anderen Mustern oder Architekturen. Diese Muster sind gut für unterschiedliche Situationen und unterschiedliche Mengen an Komplexität.

Wenn Sie wollen, so dass nur einfache Dinge, die Sie Transaction Script verwenden können. Dies ist eine Architektur, die Sie in viel von alten ASP und PHP-Seiten gesehen, wo ein einzelnes Skript, um die Geschäftslogik, Datenzugriffslogik und Präsentationslogik enthalten. Dies fällt auseinander schnell, wenn die Dinge komplizierter.

Das nächste, was Sie tun können, ist eine Trennung zwischen Präsentation und Modell hinzufügen. Das ist Active. Das Modell ist nach wie vor an die Datenbank gebunden, aber sie haben ein wenig mehr Flexibilität, da Sie Ihr Modell / dataccess zwischen den Ansichten / pages / was auch immer wieder verwenden können. Es ist nicht so flexibel, wie es aber auf Ihren Daten-Access-Lösung abhängig sein könnte, kann es flexibel genug sein. Frameworks wie CSLA in .Net haben viele Aspekte dieser patterm (ich glaube, Entity Framework ein bisschen zu viel wie folgt aussieht auch). Es kann noch viel Komplexität handhaben, ohne wartbaren zu werden.

Der nächste Schritt ist Ihre Datenzugriffsschicht und Ihr Modell zu trennen. Dies erfordert in der Regel einen guten OR-Mapper oder eine Menge Arbeit. Also nicht jeder will diesen Weg gehen. Hier gibt es viele Methoden, wie Domain-Driven Design perscribe diesen Ansatz.

Es ist also alles eine Frage des Kontextes. Was Sie brauchen, und was ist die beste Lösung. Ich habe sogar noch transaktions Skript verwende manchmal für einfachen Einmalgebrauch Code.

Andere Tipps

Ich habe schon oft gesagt, dass Active Record (oder ORM, die fast das gleiche ist), wie Geschäftsmodelle ist keine gute Idee. Lassen Sie mich erklären:

Die Tatsache, dass PHP Open Source ist, Free (und alles, was lange Geschichte ...) bietet es mit einer großen Gemeinschaft von Entwicklern Code in Foren, Websites wie GitHub, Google Code Gießen und so weiter. Man könnte dies als eine gute Sache, aber manchmal neigt es nicht „so gut“ zu sein. Zum Beispiel: Angenommen, Sie ein Projekt konfrontiert sind und Sie mögen eine ORM-Framework verwenden, um in PHP Ihr Problem geschrieben konfrontiert, gut ... Sie werden eine Menge a href haben <= "http://en.wikipedia.org / wiki / List_of_object-relational_mapping_software“rel = "nofollow"> Optionen für wählen:

  • Lehre
  • Propel
  • QCodo
  • Torpor
  • redbean

Und die Liste geht weiter und weiter. Neue Projekte werden regelmäßig erstellt. So vorstellen, dass Sie nun ein komplettes Framework aufgebaut haben und sogar einen Quellcode-Generator auf der Grundlage dieses Rahmens. Aber Sie haben nicht Business-Klassen gelegt, denn schließlich, „warum wieder die gleichen Klassen zu schreiben?“. Die Zeit vergeht, und ein neues ORM-Framework freigegeben wird und Sie in die neue ORM wechseln wollen, aber Sie werden fast jeder Client-Anwendung ändern müssen, um einen direkten Verweis auf Ihre Datenmodell.

Unterm Strich Active Record und ORM soll in der Data Layer Ihrer Anwendung sein, wenn Sie sie mit dem Presentation Layer mischen, können Sie Probleme wie in diesem Beispiel erfahren habe ich gerade gelegt.

Hören @ Mendelt klugen Worten: Lesen Martin Fowler. Er viele Bücher und Artikel über OO-Design setzen und veröffentlichte einige guten Materialien zu diesem Thema. Außerdem möchten Sie vielleicht in Anti-Patterns , genauer gesagt in Vendor Lock-In , das ist das, was passiert, wenn wir unsere Anwendung abhängig von 3rd-Party-Tool machen. Schließlich schrieb ich dieses Blog-Post sprechen über das gleiche Problem, so dass, wenn Sie wollen, check it out.

Hope meine Antwort irgend wurde.

Die große Sache über die Rails Active als Modell in MVC ist, dass es Ihnen eine automatische ORM (Object Relational-Mapper) und einfache Möglichkeit zu schaffen Assoziationen zwischen den Modellen gibt. Wie Sie wies darauf hin, kann MVC manchmal fehlen.

Deshalb für einige komplexe Transaktion viele Modelle beteiligt, würde ich vorschlagen, einen Moderator zwischen dem Controller und Ihren Modellen zu verwenden ( Rails Presenter Pattern ). Der Presenter würde Ihre Modelle und Transaktionslogik aggregieren und würde leicht überprüfbar bleiben. Sie möchte auf jeden Fall bemühen, alle Ihre Geschäftslogik in Ihren Modellen oder Moderatoren zu halten, und aus Ihrem Controller ( dünne-Controller, Fett Modell ).

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