Niektóre „konwencje dotyczące konfiguracji” sprowadzają się do rozsądnych wartości domyślnych. Musisz tylko skonfigurować coś, aby użyć go do niestandardowego celu. Muszę porównać Struts do Rails tutaj. W Railsach musisz umieścić swoje „akcje / ekrany” w folderze, a potem one po prostu działają. W Struts nadal musisz umieścić je w folderze, ale musisz także wymyślić nazwę akcji ORAZ plik JSP ORAZ nazwę formularza ORAZ fasolkę formularza ORAZ określić, jak te trzy rzeczy działają razem w Struts-config. xml ORAZ określ, że formularz należy do żądania (RESTful). Jeśli to nie wystarczy, mapowanie form / form-bean ma własną sekcję w Struts-config, która jest następnie mapowana niezależnie na sekcję akcji w tym samym pliku i wszystko opiera się na ręcznie napisanych ciągach w pliku JSP, aby działać prawidłowo. Dla każdego ekranu to co najmniej 6 rzeczy, których nie powinieneś robić i tyle okazji do popełnienia błędu. Myślę, że możesz ustawić większość lub wszystkie te rzeczy ręcznie w Railsach, jeśli potrzebujesz, ale 2/3 czasu rozwoju Struts zajmuje budowanie i utrzymywanie niepotrzebnych warstw złożoności.
Szczerze mówiąc, Struts 1 został zaprojektowany, gdy ludzie przenosili aplikacje między komputerem a Internetem. Elastyczność, którą wyposażył Struts, sprawia, że nadaje się do wszystkiego, co robi Rails, a także do wszystkiego, czego potrzebuje aplikacja komputerowa. Niestety górą konfiguracji, która umożliwia tę elastyczność, jest ogromna kula i łańcuch dla kogoś, kto musi tylko napisać aplikację internetową lub tylko aplikację komputerową.
Pracowałem gdzieś, że zrobili następny krok i argumentowali: „Konfiguracja nad kodem ”, ale widząc, że doprowadzono to do jego logicznej skrajności, wynik jest taki, że konfiguracja staje się nowym językiem kodowania. Była to gra typu shell, w której złożoność była przenoszona bez oswajania w jakikolwiek znaczący sposób. Dzięki temu doceniłem wszystkie sprawdzanie typu i inne sieci bezpieczeństwa, które ma dobrze zaprojektowany język programowania. Niektóre na wpół upakowane formaty plików konfiguracyjnych, które wybuchają bez komunikatu o błędzie, jeśli dodasz spację lub apostrof, NIE są ulepszeniem w stosunku do wysokiej jakości języka programowania, który zawiera zestawy narzędzi do edycji i kompilator jakości.
Nie wyobrażam sobie, aby rozsądne wartości domyślne naruszały jakiekolwiek teoretyczne zasady dotyczące rozszerzalności i modułowości. Programista Ruby / Rails prędzej uderzyłby ich gorącym pokerem w oko, niż przestawiłby się na framework taki jak Struts 1, w którym wszystkie konfiguracje są jawnie tworzone w wielu plikach XML. Nie spieram się ogólnie o Rails vs. Struts, ale ta konwencja może być ogromną wygraną w wydajności. Te dwie technologie są najbardziej ekstremalnym porównaniem w świecie rzeczywistym, z jakim się spotkałem.
Jeśli w ogóle pracujesz w Javie, sprawdź Joshua Blocha, „Efektywna Java”, pozycja 2: „Rozważ konstruktora w obliczu wielu parametrów konstruktora”, str. 11-16. Do większości celów niektóre parametry (konfiguracja) są wymagane, a niektóre są opcjonalne. Podstawową ideą jest wymaganie tylko niezbędnej konfiguracji i tylko spowodowanie, aby użytkownik (którym może być inny program) określił dodatkowe opcje w razie potrzeby. Miesiąc temu wyczyściłem sporo kodu z tym wzorem i pozytywnie błyszczy.