2009-05-25 18 views
7

Ich habe ein paar Fragen über hier und verschiedene Artikel über MVC gelesen und kann sehen, wie es sogar auf GUI-ereignisintensive Anwendungen wie eine Paint-App angewendet werden kann.Wo ist MVC eine schlechte Sache?

Kann jemand eine Situation anführen, in der MVC eine schlechte Sache sein könnte und seine Verwendung schlecht beraten?

EDIT: Ich spreche hier speziell über GUI-Anwendungen!

+0

Check out: http://stackoverflow.com/questions/759314/whats-an-alternative-to-mvc –

Antwort

25

Ich versuchte MVC in meinem Netzwerk-Kernel-Treiber. Der Patch wurde abgelehnt.

+1

Ha ich überlege, meine Frage zu aktualisieren, um GUI-Anwendungen zu spezifizieren ..! – joshcomley

+0

@Josh - ich stimme zu. So wie es ist, die Frage ist ein bisschen wie fragen "Was sind einige Jobs, wo die Verwendung eines Schraubenziehers wäre eine schlechte Sache" - die Frage auf Fälle beschränken, in denen die Verwendung eines Schraubenziehers sogar sinnvoll wäre, wird zu besseren Antworten führen. Aiden ist lustig, aber nicht besonders nützlich, außer um die offensichtlichen Einschränkungen des Werkzeugs aufzuzeigen. – tvanfosson

4

MVC ist für Webanwendungen sinnvoll. In Web-Anwendungen verarbeiten Sie einige Daten (auf SA: Fragen schreiben, Kommentare hinzufügen, Benutzerinformationen ändern), Sie haben Status (eingeloggter Benutzer), Sie haben nicht viele verschiedene Seiten, aber viele verschiedene Inhalte passen in diese Seiten. Eine Fragenseite vs. eine Million Fragen.

Für die Erstellung von CMS zum Beispiel ist MVC nutzlos. Sie haben keine Modelle, keine Controller, nur ein paar Seiten Text mit Dekorationen und Menüs. Das Problem besteht darin, dass keine Daten mehr verarbeitet werden. Das Problem besteht nun darin, diesen Textinhalt ordnungsgemäß bereitzustellen.

Tho, CMS Admin würde auf MVC ganz gut bauen, es ist nur Benutzer Teil, der nicht würde.

Für Webdienste sollten Sie besser REST verwenden, was meiner Meinung nach ein eindeutiges Paradigma ist.

WebDAV-Anwendung würde auch nicht viel von MVC profitieren.

The caveat on Ruby for Web programming ist, dass Rails besser für den Aufbau von Web-Anwendungen geeignet ist. Ich habe viele Projekte gesehen, die versuchen, einen WebDAV-Server oder ein Content-Management-System CMS mit Rails zu erstellen und kläglich scheitern. Während Sie in Rails ein CMS erstellen können, gibt es viel effizientere Technologien für die Aufgabe, wie Drupal und Django. In der Tat, würde ich sagen, wenn Sie eine Java Portal-Entwicklungsbemühung betrachten, sollten Sie stattdessen Drupal und Django für die Aufgabe auswerten.

+0

Warum hätten Sie keine Modelle in einem CMS? Sicherlich könnte jede "Funktion" des CMS einen Controller haben, der dazu passt? – joshcomley

+0

Korrigiert: Sie können Ihre Verwaltungsseiten dazu bringen, MVC zu verwenden, aber Benutzerseiten sind nur Seiten mit Text, dort gibt es keine eindeutigen "Funktionen", stattdessen gibt es eine Handvoll Menüs, eine Kopfzeile, etwas Text, eine Vorlage für alle . – alamar

+0

@alamar - klingt wie ein Modell für mich. – tvanfosson

2

Alles, was Sie in 3rd-Party-Komponenten fallen lassen wollen, wird es schwer machen, im MVC-Muster zu arbeiten. Ein gutes Beispiel hierfür ist ein CMS.

Jede Komponente, die Sie bekommen, wird ihre "eigenen" Controller-Objekte haben, und Sie werden nicht in der Lage sein, die "Kontrolle" des Modells zu teilen -> ui passing.

+0

Hängt davon ab, ob die Komponenten von Drittanbietern für den Einsatz in einer MVC-Welt entwickelt wurden. Sie könnten so gebaut werden, dass sie mit bestimmten Modellen arbeiten und keine separaten Controller erfordern, wobei Ihr eigener Controller/Ihre eigene Aktion das erforderliche Modell bereitstellt. Ich habe bereits einige Instanzen von Benutzersteuerelementen, die eventuell in generische Komponenten umgestaltet werden könnten. – tvanfosson

+0

Siehe Typo3 Baum der Plugins oder Vanille Garden Framework, wie sie dieses Problem in PHP lösen. In Ruby/Rails verwenden Sie Mixins/Module, um "normalen" Controller-Code zu erben. Wenn Sie z.B. Wenn Sie die Benutzerauthentifizierung erneut verwenden, können Sie entweder einen Filter im Controller selbst verwenden oder Ihren Code im Application/Base-Controller Ihres Frameworks deklarieren. Zusammengefasst: Arbeiten mit Komponenten von Drittanbietern ist nur und in allen Szenarien schwierig, wenn sie keine Tausch-Schnittstellen haben. – Radek

0

Wann ist es eine schlechte Sache? Wo auch immer es eine andere Code-Struktur gibt, die besser zu Ihrem Projekt passt.

ist es unzählige Projekte, bei denen MVC nicht „fit“, aber ich sehe nicht, wie eine Liste von ihnen von Nutzen sein würde ..

Wenn MVC passt, verwenden Sie es, wenn nicht, verwenden Sie etwas sonst ..

+0

Ich bin nicht nach einer Liste von Anwendungen, ich bin nach einigen allgemeinen Begründungen für die Verwendung von MVC – joshcomley

11

Ich denke du siehst es irgendwie rückwärts. Der Punkt ist nicht zu sehen, wo Sie ein Muster wie MVC anwenden können, der Punkt ist, die Muster zu lernen und zu erkennen, wenn das Problem, das Sie versuchen zu lösen, natürlich durch das Anwenden des Musters gelöst werden kann. Also, wenn Ihr Problem Raum natürlich in Modell, View und Controller getrennt werden kann, dann ist es ein guter Kandidat für MVC. Wenn Sie nicht leicht erkennen können, welche Teile Ihres Designs in die drei Kategorien fallen, ist dies möglicherweise nicht das richtige Muster.

+0

Guter Punkt. Die Frage ergab sich immer dann, wenn ich keinen Weg finden konnte, eine passende Lösung zu finden. Eine Google-Suche und ein paar Lesevorgänge später finden einen Weg, MVC zu verwenden - auf natürliche und nützliche Weise. – joshcomley

+1

+1 Ich stimme zu MVC ist eine Beschreibung einer Problemklasse und nicht eine Lösung außerhalb dieser Klasse. –

1

Ich weiß nicht unbedingt, dass MVC jemals wirklich eine schlechte Idee für eine GUI-App ist.Aber es gibt Alternativen, die wohl besser sind (und auch schlechter, je nachdem, wessen Meinung du fragst). Am gebräuchlichsten ist MVP. Hier finden Sie eine Erklärung: Everything You Wanted To Know About MVC and MVP But Were Afraid To Ask.

Obwohl ich denke, es wäre eine schlechte Idee, MVC zu verwenden, wenn Sie ein Framework verwenden oder anderweitig mit Software interagieren, die nicht für MVC entwickelt wurde.

Mit anderen Worten, es ist viel wie Vergleichen von Programmiersprachen. Es gibt normalerweise nicht viele Aufgaben, denen man sagen kann, dass man besser ist als die anderen. Es läuft normalerweise auf die Präferenz des Programmierers, die Verfügbarkeit von Bibliotheken und die Erfahrung des Teams hinaus.

1

MVC sollte nicht in Anwendungen verwendet werden, bei denen die Leistung kritisch ist. Ich weiß nicht, ob das immer noch mit der Zunahme der Rechenleistung zu tun hat, aber ein Beispiel ist eine Call-Center-Anwendung. Wenn Sie 0,5 Sekunden pro Anruf sparen und Informationen eingeben können, summieren sich diese Einsparungen im Laufe der Zeit. Um das letzte bisschen Leistung aus Ihrer App herauszuholen, sollten Sie eine Desktop-App anstelle einer Web-App verwenden und direkt mit der Datenbank sprechen.

+1

Stackoverflow ist mit MVC gebaut und Jeff hat gesagt, dass die Leistung ist kritisch. SO ist auch sehr schnell, also denke ich nicht, dass Leistung ein Problem ist. – Alex

+0

Ja aus meiner Erfahrung MVC eignet sich für gute Praxis und ich habe noch nie einen Performance-Overhead durch die Verwendung des MVC-Paradigmas selbst gesehen. – joshcomley

-6

MVC und ORM sind ein Witz .... sie sind nur geeignet, wenn Ihre App keine Datenbank-App ist, oder wenn Sie die App-Datenbank agnostisch halten wollen. Wenn Sie ein RDBMS verwenden, das gespeicherte Prozeduren unterstützt, ist dies die einzige Möglichkeit. Gespeicherte Procs sind der bevorzugte Ansatz für erfahrene Anwendungsentwickler. MVC und ORM werden nur von Unternehmen beworben, die versuchen, Produkte oder Dienstleistungen im Zusammenhang mit diesen Technologien zu verkaufen (z. B. versucht Microsoft, VS zu verkaufen). Verschwenden Sie keine Zeit mehr damit, Java und C# zu lernen, sondern konzentrieren Sie sich auf das, was wirklich zählt, auf Javascript und SQL.

+0

Also ... Herr Erfahrener Entwickler ... Ich sollte lernen, wie man SQL und Javascript benutzt, um einen Netzwerktreiber zu schreiben? – Arafangion

+0

Ich stimme mit "Erfahrener Entwickler" überein. Komplexe Projekte erfordern ein gutes Teammanagement und gegenseitig austauschbare Entwickler, aber keine Entwurfsmuster, die nur die Komplexität erhöhen und fast nichts zurückgeben. Wenn StackOverflow mit MVC geschrieben wird, dann ist MVC nicht der Grund dafür, dass StackOverflow so ein großartiges Produkt ist, aber das Team und die Organisation dahinter – PatlaDJ

+0

Wie auch immer, das war über MVC, ich MUSS der folgenden Aussage nicht zustimmen "Hör auf deine Zeit zu verschwenden Java und C#, konzentrieren sich stattdessen auf das, was wirklich zählt, Javascript und SQL. " :))) – PatlaDJ

Verwandte Themen