Erklären Sie MVC Nicht-Programmierern [closed]

31

Ich muss Nicht-Programmierern MVC erklären. Nämlich an Manager anderer Abteilungen im Rahmen des Fortschrittsberichts. Eines der Dinge, die ich tue, ist die Umgestaltung unserer Codebasis in Richtung MVC-Trennung.

Was ist die MVC-Trennung, die sie fragen könnten? Warum wird es gebraucht, könnten sie fragen?

Nach dem Lesen einer ziemlich technischen Antwort wie dieser: Was ist MVC wirklich? Ich bin nicht ganz zufrieden, da ich mit Nicht-Programmierern sprechen werde. Sie können ihre Köpfe nicken, aber sie werden wahrscheinlich nicht verstehen, was es ist und warum es gebraucht wird.

In Wirklichkeit verstehe ich nicht ganz, was MVC anders ist als "Trennung von Bedenken, Pflichten, Funktionen, Klassen, Blöcken, Aufgaben, Dingen, um die Flexibilität beim Vornehmen von Änderungen an der Software zu verbessern". Die Trennung von Datenbank und Ansicht von Geschäftslogik mithilfe von Techniken wie DI- und OO-Tools und -Techniken ist für mich eine MVC-Trennung.

Wenn Sie also das nächste Mal MVC einem Nicht-Programmierer erklären, der beispielsweise über Hintergrundwissen in Vertrieb und Buchhaltung verfügt, was würden Sie ihm sagen?

Dennis
quelle
12
Stellen Sie fest, dass es sich um "Best Practice" handelt und sie sich freuen werden.
Johan
2
Wenn ich es in vereinfachten Begriffen beschreiben müsste, würde ich es als ein Architekturmuster beschreiben, das sich auf die Trennung von Belangen konzentriert - dies wiederum ermöglicht Frontend-Entwicklern, sich auf das Frontend zu konzentrieren, Backend-Entwickler, sich auf das Backend zu konzentrieren, und Datenbank-Entwickler Konzentrieren Sie sich auf die Datenbank, ohne sich gegenseitig so zu belästigen, wie dies in einem anders strukturierten System der Fall wäre.
Theodoros Chatzigiannakis
2
Wie wirst du es erklären, wenn du nicht ganz verstehst, was es ist?
Freitag,
Ich denke, es gibt wahrscheinlich eine Analogie zum Aspekt der industriellen Revolution mit austauschbaren Teilen. Sicher können sie die Vorteile des Bohrens und Gewindebohrens eines 1 / 4-20-Lochs verstehen, ohne sich Gedanken darüber machen zu müssen, ob das Schraube passt.
J ...

Antworten:

70

Du erklärst MVC nicht.

Was Sie tun, ist zu erklären, dass dies eine Umstrukturierung der Codebasis ist.

Eine Umstrukturierung, die die Codebasis vereinfacht und es den Entwicklern ermöglicht, Fehlerberichte und Featureanfragen schneller und besser zu ändern, und zwar mit weniger Fehlern.

Sie müssen nicht die technischen Details kennen, nur warum es gemacht wurde, was damit erreicht wurde und wie das Geschäft davon profitiert.

Mit anderen Worten - sprechen Sie ihre Sprache mit ihnen.

Oded
quelle
13
IOW erklären MVC die Notwendigkeit einer Umstrukturierung (das ist großartig: sprechen Sie ihre Sprache mit ihnen )
Wolf
4
Es ist oft hilfreich, Fälle zu erwähnen, in denen Fehlerkorrekturen und Funktionsanfragen schneller (billiger) gewesen wären, wenn die Codebasis die richtige Trennung der Bedenken gehabt hätte.
Eric Wilson
14
Ich denke, es wäre fruchtbar, den nächsten Sprung zu wagen und vorzuschlagen, dass die gesprochene Sprache $ £ ¥ € ƒруб ist. Wenn Sie es einem Nicht-Programmierer erklären, ist es wahrscheinlich in einem geschäftlichen Kontext und es ist sehr wahrscheinlich, dass es auf "Wohin geht das Geld?" Hinausläuft.
Joel Etherton
Es könnte hilfreich sein, mit etwas zu vergleichen, das sie kennen. "Wir strukturieren es neu, um es an die weit verbreiteten Organisationsprinzipien anzupassen, ähnlich den Konventionen, auf die sich die Wirtschaftsprüfer geeinigt haben."
Nathan
41

Während ich Odeds Antwort unterstütze , dass Sie den Geschäftsführern technische Projekte in "ihrer Sprache" erläutern sollten, habe ich ein Bedenken: "Sie müssen keine technischen Details wissen, nur warum es getan wurde."

Wenn Sie an einem Projekt- oder Investitionsbesprechungstreffen mit Abteilungsleitern teilnehmen und erklären, dass "das ist, was wir tun", möchten sie möglicherweise fragen: "Ähm ... warum? Das scheint eine große Investition von Zeit und Energie zu sein. Könntest du uns ein bisschen mehr Verständnis dafür geben, was du tust und warum? " Das scheint eine überaus vernünftige Frage zu sein. Sie wollen nicht in die Lage versetzt werden, "Nun ... es ist kompliziert." oder "Nein, ich kann es nicht wirklich erklären." oder "Mach dir darüber keine Sorgen." Je älter die Mitarbeiter sind, für die Sie die Projektüberprüfung durchführen, desto unwahrscheinlicher ist es, dass sie "nur Dinge, die ich nicht gut erklären kann" fliegen lassen. Besser, wenn Sie mindestens eine Stufe tiefer gehen können, damit sich andere wohl fühlen. 1) Sie wissen, was Sie '

So haben Sie eine Skizze von MVC in Ihrer Gesäßtasche, bereit zu gehen. So etwas wie:

"Es ist ein bisschen technisch, aber ... MVC unterteilt Code in Modelle (verantwortlich für die Kerndaten und die Geschäftslogik), Ansichten (die die Daten anzeigen) und Controller (die Benutzerinteraktionen und -aktualisierungen verarbeiten). Es ist eine bewährte Architektur - - Möglicherweise das erfolgreichste "Entwurfsmuster" von Software Engineering. Ich weiß, dass es wie "nur ein Klempner" erscheinen mag, aber um alle eingehenden Anforderungen zu erfüllen, benötigen wir eine stärkere Grundlage Funktionen und Beheben von Fehlern schneller. "

Selbst wenn sie MVC am Ende nicht vollständig verstehen und selbst wenn Sie es zu stark vereinfachen mussten, um es verständlich zu machen ("brechen Sie ein paar Eier, um ein Omelett zu machen"), werden Sie es wahrscheinlich viel angenehmer finden Halten Sie eine Erklärung bereit, als vor Führungskräften zu sagen: "Ich kann es nicht erklären" oder "Sie sind nicht qualifiziert, es zu verstehen".

Jonathan Eunice
quelle
4
So, have a sketch of MVC in your hip pocket, ready to go.- oder vielleicht eine pp Präsentation ;-) was benutzer angeht "ihre sprache"?
Wolf
Ich würde nicht sagen, dass "Modelle für die Kerndaten und die Geschäftslogik verantwortlich sind". Die Geschäftslogik lässt sich am besten in eine eigene Ebene unterteilen. Tatsächlich sind Modelle nur Sammlungen von Daten, die vom Controller an die Ansicht übergeben werden, um diese beiden Ebenen zu entkoppeln. Beispielsweise übergeben Sie fast nie ein einzelnes ORM-Objekt an eine Ansicht, sondern nur einen Satz davon sowie einige andere verschiedene Daten. Siehe meine Antwort für eine längere Erklärung.
Tobia,
2
@Tobia Genau das nennt Microsoft ein Model. "Das" Modell ist das präsentationsunabhängige Computermodell des Systems, mit dem der Benutzer interagiert, also so ziemlich alles, was nicht Teil der Ansicht und des Controllers ist.
Doval
@Doval Das mag eine Interpretation von Microsoft sein, aber es ist eine Einschränkung der Allgemeinheit von MVC. Schauen Sie sich agile MVC-Frameworks wie Ruby on Rails, Django oder Grails an, um zu sehen, was ich meine. Ich habe meine Antwort noch erweitert, um dieses häufige Missverständnis abzudecken.
Tobia
3
Im ursprünglichen Smalltalk MVC-Muster hatte jedes Steuerelement auf dem Bildschirm ein eigenes Modell, eine eigene Ansicht und einen eigenen Controller. Tun wir nicht so, als gäbe es eine einzige Definition von MVC, der sich alle einig sind. Zum Glück muss er nur erklären, was er tut.
RemcoGerlich
9

um die Flexibilität beim Vornehmen von Änderungen an der Software zu verbessern

Manager interessieren sich für das Endergebnis. Je weniger technisch sie sind, desto unwahrscheinlicher ist es, wie Sie dorthin gelangen. MVC ist sehr verbreitet, beliebt und bewährt.

Wenn in Zukunft Änderungsanforderungen gestellt werden, können Sie das Management darüber informieren, dass diese einfacher und schneller durchgeführt werden können. Jeder hört das gerne.

Es ist eine gängige Strategie, daher sollte die Einstellung neuer Entwickler kein Problem darstellen. Tatsächlich ziehen Sie möglicherweise bessere Entwickler an, die starke Befürworter sind.

Dies alles wird sehr schwierig, wenn es in diesem speziellen Projekt viele dringende Probleme gibt. Sie sind möglicherweise nicht bereit, einen Schritt zurück zu machen, sodass Sie zwei Schritte vorwärts machen können. Zur Lösung kann es sein, in kleineren Stücken zu warten oder umzusetzen.

JeffO
quelle
9
  • Modell - Kabel / Strom
  • Ansicht - Leuchte
  • Controller - Lichtschalter

Relativ einfach auszutauschende Bauteile (Leuchte, Lichtschalter / Dimmer). Vielleicht nicht so sehr die Verkabelung, aber es kann trotzdem gemacht werden, ohne andere Komponenten zu beeinflussen. Jeder sollte in der Lage sein, dies in seinem Kopf zu visualisieren, selbst Marketing- / Verkaufstypen. (Klare Trennung usw.)

Teilen Sie Ihrem Chef / Ihren Mitarbeitern nun mit, dass in unserer Anwendung / unserem System der Schalter in die Leuchte eingebettet und die Leuchte mit Kupferdraht umwickelt ist. Stellen Sie sich nun vor, Sie würden versuchen, die Leuchte, den Schalter oder das Kabel zu aktualisieren. Sehr teuer, Auswirkungen auf andere Komponenten sehr hoch und möglicherweise gefährlich, ohne etwas anderes zu zerbrechen.

MVC wendet ein Muster auf die Codebasis an, das das durcheinandergebrachte (aber funktionierende) Durcheinander in etwas verwandelt, bei dem Änderungen schneller und einfacher mit weniger Fehlern durchgeführt werden können.

Jon Raynor
quelle
Hmmm ... diese Analogie trifft den Punkt meiner Meinung nach nicht wirklich.
DevSolar
Aber die ganze Idee, eine Art Analogie zu liefern, ist es. Ich hätte etwas Ähnliches geschrieben. Normalerweise funktioniert etwas mit Autos oder Geld ganz gut ... :-)
JensG
Wirklich sind die Leute, die abstimmen sollten, die Nicht-Programmierer. Ich denke, die meisten Benutzer der Website sind Programmierer! :)
Jon Raynor
3

Ein einfacher Weg, MVC zu verstehen : Das Modell sind die Daten , die Ansicht ist das Fenster auf dem Bildschirm und der Controller ist der Klebstoff zwischen den beiden .

Die beste Rubrik aller Zeiten: "Wir brauchen SMART-Modelle, THIN-Controller und DUMB-Ansichten"

Wie bei anderen Software-Entwurfsmustern drückt MVC den " Kern der Lösung " für ein Problem aus und ermöglicht gleichzeitig die Anpassung an jedes System. Es ist besser als ein Konzept zu sehen, als eine spezifische Implementierung. Es gibt viele Implementierungen des Konzepts.

Alle MVC-Varianten verwenden dieselbe Aufteilung der Komponenten, unterscheiden sich jedoch in der Regel im Zusammenspiel dieser Komponenten.

Bildbeschreibung hier eingeben

Für diejenigen von Ihnen, die sich dessen nicht bewusst sind, wurde MVC ursprünglich in Form eines Entwurfsmusters für die Verwendung mit Smalltalk von Trygve Reenskaug im Jahr 1979 beschrieben . Sein Artikel wurde unter dem Titel "Anwendungsprogrammierung in Smalltalk-80: Verwendung des Model-View-Controllers" veröffentlicht und ebnete die Grundlage für die meisten zukünftigen MVC-Implementierungen.

Tushar
quelle
3

Ich bin mit Oded einverstanden - zu lernen, wie Sie Ihre nicht-technischen Kollegen und Manager davon überzeugen, dass das, was Sie tun, wichtig und nützlich ist, ohne die Details zu erklären, ist eine notwendige Fähigkeit, die Sie entwickeln sollten.

Ich glaube jedoch, dass die Fähigkeit , komplexe Konzepte in einfachen Worten zu erklären, tatsächlich dabei hilft - ein Problem, das nicht-technische Manager häufig haben, ist, dass sie dazu neigen, zu verstehen, was genau die Techniker tun, da sie Probleme haben misstraue ihnen. Es ist nur die menschliche Natur: Es ist einfacher zu glauben, dass etwas, das Sie nicht verstehen, nutzlos oder falsch ist, als sich darauf zu verlassen. Wenn Sie also Konzepte nach Belieben leicht verständlich machen können, können Sie diese verwenden, wann immer Sie sie benötigen, und im Laufe der Zeit werden Ihre nicht-technischen Manager feststellen , dass sie sie verstehen können, wenn sie wollen - Sie ziehen keine vor auf sie - Sie ersparen ihnen nur die Details für ihre eigene Gesundheit. Sie werden dir mehr vertrauen.

Abgesehen davon beantworten wir die Frage:

Ich finde es nützlich, Analogien zu verwenden, die Geschäftsleute verstehen. Für MVC beschreibe ich es als Geschäft.

  • Modelle sind für die Geschäftslogik und die Geschäftsdaten verantwortlich - sie sind die Dinge, die definieren, was das Programm tut, und die Details, wie es es tut. Wenn das Programm ein Unternehmen wäre, dann wären die Modelle Lagerhäuser, Fabriken, Arbeiter und Investitionsgüter. Sie wären auch die untergeordneten Manager, die sicherstellen, dass Regeln befolgt und Richtlinien durchgesetzt werden.
  • Ansichten sind die Präsentationsebene - sie zeigen dem Benutzer, was im System vor sich geht, und bieten eine Möglichkeit zur Interaktion mit dem Programm. Wenn unser Programm ein Unternehmen wäre, wären die Ansichten wie der Ausstellungsraum, der Verkaufsstand auf der Fachmesse oder die Vertriebsmitarbeiter. Sie zeigen Optionen an, geben benutzerfreundliche Informationen und Feedback und nehmen Anfragen an das Unternehmen zurück.
  • Controller sind die Koordinationsschicht - sie sorgen dafür, dass Informationen von den Modellen zu den Ansichten und umgekehrt gelangen und dass alles zusammenarbeitet, um ihre Arbeit zu erledigen. Wenn das Programm ein Unternehmen wäre, wären die Controller das mittlere und das obere Management. Sie gehen nicht zu sehr auf Details ein, sondern sorgen dafür, dass die richtigen Leute die richtigen Werkzeuge haben, um ihre Arbeit zu erledigen, und sie genehmigen oder lehnen Entscheidungen auf hoher Ebene ab. Sie geben die allgemeine Richtung vor, damit die Dinge zusammenarbeiten können.

Die Erklärung mit dieser Analogie hat den Vorteil, dass ein guter Manager die Weisheit darin sieht, Bedenken auf diese Weise zu trennen, und möglicherweise entscheidet, dass sie controllerähnlicher sein und sich in Zukunft nicht zu sehr auf Details einlassen sollten!

Das wird hoffentlich das "Was" beantworten - das "Warum" ist auch mit dieser Analogie einfach:

Stellen Sie sich ein ideales Unternehmen vor, in dem jede Abteilung für eine Reihe von Aufgaben verantwortlich ist und weiß, dass sie immer über die erforderlichen Ressourcen verfügt, ohne sich Gedanken darüber machen zu müssen, was andere tun. Ein Vertriebsmitarbeiter findet einen Kunden, erhält seinen Auftrag, gibt ihn an das genehmigende Management zurück und geht dann zur Erfüllung an das Lager / die Produktion / das Engineering. Das Feedback ist direkt - niemand muss sich einmischen, es sei denn, es gibt ein Problem. Das ist ein gutes MVC-Design - jedes Teil hat einen Job und muss sich nicht um andere Teile kümmern. Auf diese Weise ist es einfach, Änderungen vorzunehmen, wenn dies erforderlich ist. In einem Nicht-MVC-Design sind die Verantwortlichkeiten nicht klar. Der Vertriebsmitarbeiter versucht möglicherweise, das Produkt zu ändern, wenn der Kunde etwas anderes wünscht. Oder sie geben unterschiedliche Preise an, je nachdem, wie sie sich an diesem Tag fühlten. Der CEO befindet sich möglicherweise in der Fabrik und arbeitet an der Produktionslinie, wenn er sich Gedanken darüber macht, wie eine zuverlässigere Lieferkette eingerichtet werden kann. Die Lagerarbeiter sind möglicherweise auf der Verkaufsfläche und sprechen mit den Kunden, wenn sie die bereits angenommenen Bestellungen erfüllen sollen.

Mit anderen Worten, gutes MVC-Design ermöglicht es jedem Teil, sich auf eine Sache zu konzentrieren, damit es es richtig macht - genau wie ein gut organisiertes Unternehmen.

** Haftungsausschluss - Wenn Ihr Unternehmen schlecht organisiert ist, kann dies zu Beleidigungen führen. In diesem Fall benötigen Sie eine andere Analogie. Möglicherweise benötigen Sie auch einen anderen Job.

thomij
quelle
Wenn das Unternehmen des OP schlecht organisiert ist, dann schlage ich ihm vor, über "Arbeitsteilung" im Sinne des allgemeinen wirtschaftlichen Fortschritts zu sprechen, z. B. werden aus Jägern / Sammlern Facharbeiter wie Softwareentwickler :)
logc
Gute Beschreibung - ausgezeichneter Haftungsausschluss.
citizenkong
2

Die Vorteile von MVC liegen hauptsächlich in der Trennung von Bedenken:

So können sich die Menschen auf das konzentrieren, was sie am besten können.

Database admins develop the model
Programmers write the controllers
and Graphic designers can design the views.

Dies senkt die Kosten, da ineinander verschlungene Systeme erfordern, dass die Mitarbeiter entweder Experten in all diesen Bereichen sind, oder es ist wahrscheinlicher, dass Sie Probleme haben, wenn sich eine Änderung in einem Bereich auf die anderen auswirkt.

Bieten Sie Beispiele für MVC-Architekturen in der Praxis: Handys, Desktop-Telefone, Skype usw. Das Ändern der Ansicht (Art der Wähltastatur, Lautsprecher, Mikrofone) hat keinen Einfluss auf das Modell (das Audiosignal) Das Telefon, das Schallwellen in Audiosignale umwandelt.

B2K
quelle
4
Ich würde weder das MVC-Modell mit der Datenbank noch den MVC-Controller mit Benutzereingaben gleichsetzen.
Tobia
1
@Tobia Ja, aber die Nuancen davon würden für eine nicht technische Person verloren gehen. Es wird der Punkt über
B2K
@Tobia überarbeitet diese, korrigierte Beschreibung, um genauer zu sein. Danke für deine Kommentare.
B2K,
1

Ich würde ihnen sagen, dass MVC meine Bedenken trennt.

Mein erstes Anliegen ist die Codelogik - was ich hinter den Kulissen tue, damit die Website die Aktionen ausführt, die sie ausführen möchten.

Mein zweites Anliegen ist die Geschäftslogik - was sie (der Benutzer) von der Anwendung erwarten.

Meine dritte Sorge ist, wie die Seite aussieht - Die Seite, die sie besuchen, um das zu tun, was sie wollen.

(Ich werde ihnen diesen nächsten Teil nicht erzählen.) Also, in der richtigen Reihenfolge, waren meine Erklärungen für das Modell, den Controller und die Ansicht.

C Bauer
quelle
1

Erläutern Sie die Vorteile

Ich würde MVC in Bezug auf Geschäftsvorteile erklären. Ihre Manager werden dies verstehen und einsteigen, wenn die Vorteile überzeugen.

Mit MVC können Sie Ihre Anwendung in sinnvolle Einheiten aufteilen, von denen jede unabhängig von den anderen existiert. Sie erhalten sauberen, wartbaren, testbaren Code und können ihn möglicherweise zwischen Systemen wiederverwenden.

Das Model

Jedes Modell kapselt eine einzelne Art von Geschäftsinformationen, z. B. einen Kundendatensatz oder ein Produkt, zusammen mit der gesamten zugehörigen Geschäftslogik.

Wenn Sie dies herausfiltern, können Sie Ihre Geschäftslogik auf einfache Weise unabhängig von anderen Teilen Ihrer Anwendung testen.

Sie können die Anwendung auch einfach erweitern, indem Sie zusätzliche Modelle hinzufügen. Sie ist sehr modular und übersichtlich.

Jedes Modell kann theoretisch unabhängig von den anderen existieren. Sie können dies erzwingen, indem Sie Serviceobjekte verwenden, um die Beziehungen zwischen Modellen zu behandeln. Sie können Modelle austauschen, ohne den Rest des Systems zu beeinträchtigen.

Die Aussicht

Durch die Trennung Ihrer Ansicht können Sie Ihr Front-End problemlos aktualisieren, ohne das zugrunde liegende Back-End zu beschädigen.

Sie können Ihren Front-End-Code an einen anderen Entwickler weitergeben, ohne dass dieser auf das gesamte System zugreifen muss.

Sie können auch alternative Frontends erstellen, die mit dem vorhandenen System funktionieren. Sie können Ihre Daten als mobile App, API, PDF oder Excel-Tabelle anzeigen. Sie können dies tun, ohne in den Rest des Systems einzugreifen. Es ist weniger wahrscheinlich, dass Dinge versehentlich zerbrochen werden. Sie können problemlos Integrationspunkte für vorhandene Systeme erstellen, an die Sie sich anschließen können.

Der Controller

Der Controller verbindet die Modelle mit der Ansicht. Es hält alles getrennt. Sie können ganz einfach eine andere Ansicht aufrufen. Wenn Sie Ihren Modellcode ändern, muss die Ansicht nicht einmal wissen.

Andere Vorteile

Es ist ein verbreitetes Muster. Andere Entwickler können Ihren Code verstehen und daran arbeiten. Wenn Sie Jahre später zu Ihrem Code zurückkehren, können Sie ihn wahrscheinlich verstehen und Änderungen vornehmen. Es ist weniger wahrscheinlich, dass Ihr Code für einen zukünftigen Entwickler zu einem weiteren Problem wird.

Da alles seinen Platz hat, ist es viel einfacher, sauberen Code zu erstellen. Das Risiko einer Spaghettifizierung wird drastisch verringert (wenn auch nicht beseitigt). Ihr Code wird wartbar.

Da alles modular aufgebaut ist, können Sie Teile davon isoliert testen. Ihr Code ist testbar und birgt mit geringerer Wahrscheinlichkeit Fehler oder Sicherheitslücken. Zukünftige Upgrades werden viel einfacher, da Sie das gesamte System problemlos testen können.

superleuchtend
quelle