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?
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?
Antworten:
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.
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.
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.
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.
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.
tl; dr :
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.
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.
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.