Was ist eine meinungsgebundene Software?

200

Ich sehe oft Leute, die sagen, dass bestimmte Software "sehr eigensinnig" ist oder dass Microsoft dazu neigt, "nicht meinungsgebundene" Frameworks zu schreiben. Was bedeutet das eigentlich?

zvolkov
quelle

Antworten:

206

Wenn ein Framework eine Meinung hat, sperrt es Sie oder führt Sie in ihre Vorgehensweise ein.

Beispiel: Einige Leute glauben, dass ein Vorlagensystem keinen Zugriff auf benutzerdefinierte Methoden und Funktionen bieten sollte, da das System für die Rückgabe von unformatiertem HTML offen bleibt. Ein einfühlsamer Framework-Entwickler erlaubt also nur den Zugriff auf Datenstrukturen. Die Software ist von Natur aus einschränkend und ermutigt den Designer, die Dinge auf ihre Weise zu tun.

Ein weiteres Beispiel ( aus dem Signallink ) ist das Wiki . Die Designer des Wikis hatten viele Meinungen. Sie hielten HTML für zu kompliziert, als dass die Leute es schreiben könnten, und kamen daher auf die Idee, Inhalte auf natürlichere Weise zu aktualisieren. Sie haben es auch des ausgefallenen Designs beraubt, weil sie der Meinung waren, dass der Fokus mehr auf Inhalten als auf Design liegen sollte.

Apple hat starke Meinungen, wenn es seine Produkte entwirft.

Software-Design ohne Meinung ähnelt eher PERL / PHP. Es ermöglicht dem Entwickler und vertraut darauf, dass der Entwickler die richtigen Entscheidungen trifft, und gibt ihm mehr Kontrolle.

Ich würde Microsoft auch in die Spalte ohne Meinung einfügen. Ein gutes Beispiel für ein Microsoft-Framework, das keine Meinung hat : .NET. Durch Öffnen der CLR und der Spezifikationen wurden sie für alle Arten von Sprachen und Implementierungsstilen geöffnet.

cgp
quelle
18
Ich würde nicht sagen "sperrt dich", sondern es macht es nicht leicht, vom "goldenen" Pfad abzuweichen. Der goldene Weg ist normalerweise die beste Vorgehensweise, die für die meisten Menschen die meiste Zeit funktionieren sollte.
dpan
5
Ich bin damit einverstanden, dass Sperren ein bisschen stark sind, aber ich würde diese negative Konnotation beseitigen, indem ich feststelle, wie erfolgreich viele Produkte mit einer Meinung sind.
CGP
32
Nun, es ist offensichtlich, dass diese Antwort eine Meinung hat;)
dpan
6
Ein meinungsbildendes Framework ist so konzipiert, dass seine Benutzer die geringste Auswirkung auf dieses Framework haben, wenn das Framework auf eine Weise verwendet wird, die nicht gegen die vom Framework-Designer getroffenen Annahmen verstößt.
Crippledsmurf
2
Ich stimme altCognito zu. .NET ermutigt den Entwickler, Modell und Ansicht in WinForms-Apps zu mischen, indem es kinderleicht ist, Geschäftslogik in Methoden zu integrieren, die beispielsweise durch das Schaltflächenklickereignis generiert werden. Auf diese Weise ermutigt Microsoft kurzsichtige Entwickler indirekt, ihren Code an ihre Frameworks zu binden. Ein saubereres Design würde bessere Praktiken erzwingen oder fördern, z. B. das Erzwingen einer zweiten Funktion mit Modelllogik durch Klicken auf die Schaltfläche zum Klicken auf die Schaltfläche in einem separaten Modul. Nicht, dass sauberes Design in .NET nicht erreicht werden kann, es wird nur standardmäßig nicht empfohlen.
Jared Updike
62

Opinionated Software bedeutet, dass es grundsätzlich einen Weg gibt (den richtigen Weg ™), Dinge zu tun, und der Versuch, es anders zu machen, wird schwierig und frustrierend sein. Auf der anderen Seite, die Dinge tun , richtig ™ kann es machen sehr einfach mit der Software als die Anzahl der Entscheidungen zu entwickeln , dass Sie zu machen , reduziert wird und die Fähigkeit der Software - Designer zu konzentrieren sich auf die Software - Arbeit machen wird erhöht. Gut gemachte Software kann großartig sein, wenn sie gut gemacht ist, wenn Ihr Problem gut auf die Lösung passt. Es kann sehr schwierig sein, die Teile Ihres Problems zu lösen, die nicht den bereitgestellten Tools zugeordnet sind. Ein Beispiel hierfür wäre Ruby on Rails.

Nicht-meinungsgebundene Software hingegen lässt dem Benutzer (Entwickler) viel Flexibilität. Es verbietet nicht eine Methode zur Lösung eines Problems, sondern bietet flexible Tools, mit denen das Problem auf vielfältige Weise gelöst werden kann. Der Nachteil kann sein, dass es aufgrund der Flexibilität der Tools relativ schwierig sein kann, eine Lösung zu entwickeln. Ein Großteil der Lösung muss möglicherweise vom Benutzer (Entwickler) von Hand codiert werden, da das Framework nicht genügend Hilfe bietet. Sie müssen auch viel mehr darüber nachdenken, wie Sie eine Lösung bereitstellen können, und mittelmäßige Entwickler erhalten möglicherweise schlechtere Lösungen, als wenn sie sich für eine Software mit einer bestimmten Meinung entschieden hätten. PERL ist wahrscheinlich das klassische Beispiel für Software ohne Meinung.

Mein Ideal ist ein nicht meinungsgebundener Rahmen, aber einer mit starken Konventionen. Ich würde ASP.NET MVC in diese Kategorie einordnen. In Wirklichkeit ist jede Software bis zu einem gewissen Grad eine Meinung (wenn auch vielleicht nicht PERL). MVC hat starke Konventionen bei der Auswahl des Modells, bietet jedoch viele verschiedene Möglichkeiten, um Probleme innerhalb dieser Konventionen zu lösen. Einige dieser Möglichkeiten können sogar das Modell beschädigen. Eine korrekte Verwendung in Übereinstimmung mit den Konventionen, die sich in einem solchen Rahmen entwickeln, kann jedoch eine echte Freude sein.

Tvanfosson
quelle
22

Es ist im Grunde genommen eine Software, die so funktioniert, wie es die Autoren denken, anstatt zu versuchen, alle zufrieden zu stellen. Das bedeutet, dass viele Leute es nicht mögen werden, aber diejenigen, die es tun, werden es lieben.

Rails ist wahrscheinlich das kanonische Beispiel für ein meinungsgebundenes Framework: Sie machen die Dinge auf ihre Weise und alles ist reibungslos. Wenn Sie dies nicht tun, werden Sie Schmerzen haben. Aber das ist in Ordnung - wenn Sie die Dinge nicht auf ihre Weise erledigen möchten, möchten Sie keine Rails verwenden.

Rytmis
quelle
1
Ich stimme dem zu ... Ich habe ein Stück Software mit Meinung ... und es ist Meinung, weil es mein kleines Haustierprojekt ist ... Ich hatte keine Ahnung, dass es weit verbreitet sein würde ... einige lieben es, andere beschweren sich ... Aber sie alle verstehen, dass es mein
Lieblingsprojekt ist
8

Aus Gründen des Gleichgewichts werde ich eine (eher meinungsgebundene) Beschreibung liefern, die für den meinungsbildenden Ansatz günstiger ist (im Gegensatz zu einigen anderen Antworten).

Opinionated Frameworks bieten einen "goldenen Weg", der für die meisten Menschen und die meisten Szenarien (in den Augen der Autoren) die beste Vorgehensweise sein soll.

Dies bedeutet jedoch nicht unbedingt Lock-In. Dies bedeutet, dass möglicherweise zusätzliche Anstrengungen erforderlich sind, um die Dinge anders zu machen.

Weniger meinungsgebundene Frameworks bieten eine Reihe verschiedener Optionen und überlassen es Ihnen, zu entscheiden.

Opinionated Frameworks entlasten den Entwickler normalerweise, das Rad neu zu erfinden oder das gleiche Problem immer wieder zu überdenken, und helfen so, sich auf das eigentliche Problem zu konzentrieren.

In der Open-Source-Welt finden Sie viele meinungsgebundene, aber konkurrierende Frameworks, sodass Sie immer noch die Wahl haben. Sie müssen nur Ihren eigenen goldenen Weg wählen.

dpan
quelle
1
+1, Sie möchten gerne Unternehmens-Apps erwähnen. Siebel hat einen goldenen Weg, der nicht leicht zu durchbrechen ist, obwohl dies möglich ist, und ich habe in einem Team gearbeitet, das dies gelegentlich tat. Dies kann die Entwicklung beschleunigen, da Sie nicht ständig Elemente der Benutzeroberfläche, Datenspeicherung und Geschäftslogik entwickeln müssen.
J. Polfer
5

Opinionated Software ist so aufgebaut und gestaltet, dass es einfach ist, Dinge auf eine bestimmte Art und Weise zu tun. Bestimmte Designmuster werden mehr bevorzugt als andere. Dabei ist es schwierig, von dem Stil der Softwareentwicklung abzuweichen, für den es entwickelt wurde. Eine andere Art, es auszudrücken, ist, dass es "Konvention gegenüber Konfiguration" bevorzugt. dh Die Konfigurationsoptionen sind sehr begrenzt, da die Software viele Konfigurationsaspekte übernimmt. Opinionated Software ist normalerweise schneller zu beherrschen, wenn die Annahmen verstanden sind.

Unopinionierte Software macht dagegen nur wenige Annahmen. Infolgedessen verfügen nicht überarbeitete Software- / Softwareentwicklungs-Frameworks häufig über viele Konfigurationsoptionen. Ein Entwickler muss in der Regel viele Entscheidungen in Bezug auf verschiedene Aspekte der Software treffen. Oft werden verschiedene Werkzeuge entwickelt, um den Umgang mit diesen enormen Möglichkeiten zu erleichtern. Beispiel: Visual Studio .NET für .NET, Eclipse IDE für Java usw. Die Beherrschung von nicht geopferter Software dauert in der Regel länger als die von meinungsgebundener Software.

Kunal
quelle
5

tl; dr :

  • Meinung : zB Ruby on Rails . Es gibt einen besonders bevorzugten Weg, um Dinge zu tun, und Sie erhalten viel Unterstützung, wenn Sie Dinge auf diese Weise tun. Dinge auf andere Weise zu tun ist schwierig oder für einige Systeme unmöglich (Cassandra fällt mir ein).
  • Ohne Meinung : zB Perl 5 . Sie können alles tun, was Sie wollen, wie Sie wollen, in jedem Stil. Alle Stile sind gleichermaßen offen, gültig und werden unterstützt.
00prometheus
quelle
3

Viele Leute bezeichnen ASP.NET MVC als "unopinioniertes" Framework, und ich wollte nur ein paar Gedanken dazu abwägen.

Es ist wahr, dass ASP.NET MVC nicht zu viel verlangt; Sie können jede beliebige Persistenzlösung verwenden, sei es Linq-to-SQL, ADO.NET-Entitäten, NHibernate usw.

Auf der anderen Seite tendiert das MVC-Framework dazu, "Konvention gegenüber Konfiguration" zu bevorzugen, um Phil Haack zu zitieren, der stark vorschlägt, dem vordefinierten Muster für die Lokalisierung von Controllern, Ansichten, Modellen und anderem Code zu folgen. Obwohl Sie dieses Verhalten ändern können, ist es einfacher, mit der Strömung zu schwimmen, und für die meisten Menschen ist dies kein Problem.

Um ASP.NET MVC herum gibt es auch viele Leute mit einer Meinung, was meiner Meinung nach zu vielen voreingenommenen Tutorials führt, die darauf bestehen, z. B. Unit-Tests und Abhängigkeitsinjektion abzudecken. Ich bin alle für gute Tests und die Trennung von Bedenken, aber ich nehme wahr, dass solche Themen ein wenig in den Rachen gedrückt werden, oft bevor nützlichere Grundlagen behandelt werden.

Auch hier muss ich zugeben, dass das Framework selbst in diesen Bereichen völlig offen ist für die Übernahme der gewünschten Unit-Testing-Lösung sowie der von Ihnen verwendeten Abhängigkeitsinjektions- und Verspottungs-Frameworks. Ich denke, dies ist ein weiteres Beispiel dafür Flexibilität, selbst innerhalb des "Bibel-Bashing" von Unit-Tests usw., das anscheinend vor sich geht.

rauben
quelle
2

Es ist die Anzahl der Konventionen, die in einem Rahmenwerk implementiert sind, und die Anzahl der getroffenen Entscheidungen.

Wenn es zum Beispiel 5 (oder mehr) verschiedene Möglichkeiten gibt, Formulardaten an eine Controller-Aktion zu senden (was in ASP.NET MVC der Fall ist), scheint das Framework ziemlich "unvoreingenommen" zu sein - die Entscheidung liegt vor für dich!

Wenn das Framework jedoch (entweder durch direktes Deaktivieren anderer Methoden oder durch starkes Ermutigen) nur eine Möglichkeit ermöglicht, dies zu tun (was bei Fubu MVC der Fall ist), können Sie sagen, dass die Entscheidung vom Framework getroffen wurde Damit wird der Rahmen beurteilt.

mookid8000
quelle
1

Das Beispiel, das Sie im Moment häufig sehen werden, ist das ASP.NET MVC-Framework. Es ist erstaunlich erweiterbar, aber das ist in gewisser Hinsicht der Untergang, es gibt kein Fleisch. Möchten Sie Datenzugriff durchführen? Das musst du selbst schreiben. Willst du AJAX? Das Gleiche gilt.

Da es jedoch sehr erweiterbar ist, können Sie es, wenn Sie darauf aufbauen, in ein meinungsbildendes Framework verwandeln. Dies ist, was MVCContrib tun, sie geben Ihnen spezifische Methoden, um Dinge zu tun, was bedeutet, dass Sie weniger Code schreiben müssen.

Dies bedeutet, dass, wenn Sie von der Meinung abweichen möchten, oft mehr Arbeit zu tun ist, als wenn Sie an der Vanille-Version gearbeitet haben. Dies ist jedoch ein 80/20-Szenario. Wenn Sie Ihr Meinungsbild richtig gewählt haben, möchten Sie nur in 20% der Fälle von den Meinungen abweichen, und in den anderen 80% der Fälle sind Sie hochproduktiv.

Garry Shutler
quelle
ASP.NET MVC scheint natürlich zum ASP.NET AJAX-Framework zu passen und enthält sogar MVC-spezifische Ergänzungen zu dieser Bibliothek. Daher würde ich nicht zustimmen, dass die Wahl der Ajax-Implementierung völlig unvoreingenommen ist. Außerdem schreibt die Bibliothek das ue von jQuery nicht ausdrücklich vor oder empfiehlt es nicht einmal, aber sie bündelt es und deutet dabei verstohlen in diese Richtung, während sie den Mund aufmacht.
Rob