Ein Teil der "Konvention über Konfiguration" läuft nur auf vernünftige Standardeinstellungen hinaus. Sie sollten nur etwas konfigurieren müssen, um es für einen nicht standardmäßigen Zweck zu verwenden. Ich muss hier Struts mit Rails vergleichen. In Rails musst du deine "Actions / Screens" in einen Ordner legen und dann funktionieren sie einfach. In Struts müssen Sie sie noch in einem Ordner ablegen, aber Sie müssen auch einen Aktionsnamen UND eine JSP-Datei UND einen Formularnamen UND eine Formular-Bean erstellen UND angeben, wie diese drei Dinge in Struts-config zusammenarbeiten. xml UND geben Sie an, dass das Formular zur Anforderung gehört (RESTful). Wenn dies nicht ausreicht, verfügt das Form / Form-Bean-Mapping über einen eigenen Abschnitt in Struts-config, der dann unabhängig dem Aktionsabschnitt in derselben Datei zugeordnet wird und für die Arbeit auf handgeschriebene Zeichenfolgen in der JSP-Datei angewiesen ist richtig. Für jeden Bildschirm Das sind mindestens 6 Dinge, die Sie nicht tun sollten, und ebenso viele Möglichkeiten, einen Fehler zu machen. Ich denke, Sie können die meisten oder alle diese Dinge in Rails manuell einstellen, wenn Sie müssen, aber 2/3 der Struts-Entwicklungszeit wird für den Aufbau und die Aufrechterhaltung unnötiger Komplexitätsebenen benötigt.
Um ehrlich zu sein, wurde Struts 1 entwickelt, als Benutzer Anwendungen zwischen dem Desktop und dem Web portierten. Die Flexibilität, die Struts eingebaut hat, macht es für alles, was Rails macht, sowie für alles, was eine Desktop-Anwendung benötigen würde, geeignet. Leider ist der Konfigurationsberg, der diese Flexibilität ermöglicht, ein riesiger Ball und eine riesige Kette für jemanden, der nur eine Web-App oder nur eine Desktop-App schreiben muss.
Ich habe irgendwo gearbeitet, wo sie den nächsten Schritt unternahmen und argumentierten: "Konfiguration über Code ", aber nachdem sie gesehen haben, dass dies zu einem logischen Extrem wurde, ist das Ergebnis, dass die Konfiguration zu einer neuen Codierungssprache wird. Es war ein Shell-Spiel, bei dem die Komplexität gesteigert wurde, ohne in irgendeiner Weise gezähmt zu werden. Und es gab mir eine Anerkennung für all die Typenkontrollen und anderen Sicherheitsnetze, die eine gut gestaltete Programmiersprache hat. Einige halbfertige Konfigurationsdateiformate, die beim Hinzufügen eines Leerzeichens oder eines Apostrophs ohne Fehlermeldung in die Luft gejagt werden, sind KEINE Verbesserung gegenüber einer hochwertigen Programmiersprache, die über eine Reihe von Bearbeitungswerkzeugen und einen dafür geschriebenen Qualitätscompiler verfügt.
Ich kann mir nicht vorstellen, dass vernünftige Standardeinstellungen gegen theoretische Prinzipien in Bezug auf Erweiterbarkeit und Modularität verstoßen. Ein Ruby / Rails-Programmierer würde eher ein heißes Poker in die Augen bekommen, als zu einem Framework wie Struts 1 zu wechseln, bei dem alle Konfigurationen explizit in mehreren XML-Dateien vorgenommen werden. Ich diskutiere nicht generell über Rails vs. Struts, aber diese Konvention kann einen enormen Produktivitätsgewinn bedeuten. Diese beiden Technologien sind die extremsten Vergleiche in der Praxis, die mir begegnet sind.
Wenn Sie überhaupt in Java arbeiten, lesen Sie Joshua Blochs "Effective Java", Punkt 2: "Betrachten Sie einen Builder, wenn Sie mit vielen Konstruktorparametern konfrontiert werden", S. 11-16. Für die meisten Zwecke sind einige Parameter (Konfiguration) erforderlich, andere sind optional. Die Grundidee besteht darin, nur die erforderliche Konfiguration zu erfordern und den Benutzer (bei dem es sich auch um ein anderes Programm handeln könnte) zu veranlassen, bei Bedarf zusätzliche Optionen anzugeben. Ich habe vor einem Monat eine Menge Code mit diesem Muster aufgeräumt und es funkelt positiv.