** Konwencja o konfiguracji (COC) to paradygmat projektowania oprogramowania, którego celem jest uproszczenie rozwoju za pomocą wstępnie zdefiniowanych założeń i standardów, zmniejszając liczbę decyzji, które muszą podejmować programiści. Podczas gdy COC może zwiększyć wydajność i spójność, istnieją scenariusze, w których mogą się nie powieść lub być mniej skuteczne:
1. Brak elastyczności **
Jedną z głównych krytyki COC jest jego potencjał ograniczenia elastyczności. W środowiskach, w których wymagane są unikalne lub niestandardowe rozwiązania, ściśle przestrzeganie konwencji może być restrykcyjne. Na przykład, jeśli projekt wymaga schematu bazy danych, który nie przestrzega konwencjonalnych konwencji nazewnictwa, konieczna jest dodatkowa konfiguracja, która może zrównoważyć korzyści COC [5] [4].
2. Konflikty z innymi zasadami projektowymi **
COC może czasami sprzeciwić się z innymi zasadami projektowymi, takimi jak zasada „jawna jest lepsza niż dorozumiana” z Zen Pythona. Ta zasada sugeruje, że jawne konfiguracje są lepsze niż domyślne założenia, które mogą prowadzić do zamieszania lub nieoczekiwanego zachowania, jeśli nie dobrze udokumentowane [9] [4].
3. Złożoność w niestandardowych scenariuszach **
W ramach złożonych lub niestandardowych scenariuszy COC może nie zapewnić niezbędnej elastyczności do efektywnego radzenia sobie z unikalnymi wymaganiami. Na przykład w systemie, w którym należy zintegrować wiele baz danych o różnych strukturach schematu, poleganie wyłącznie na konwencjach może prowadzić do nieefektywności lub dodatkowej złożoności [4] [10].
4. Krzywa uczenia się i adopcja **
Wdrożenie COC wymaga pewnego poziomu znajomości samych konwencji. Nowi programiści mogą mieć trudności z uczenie się i dostosowanie się do tych konwencji, zwłaszcza jeśli są one wykorzystywane do bardziej jawnych metod konfiguracji. Może to zwiększyć krzywą uczenia się i potencjalnie utrudniać produktywność nowych członków zespołu [1] [4].
5. domyślne założenia i dokumentacja **
COC w dużej mierze opiera się na domyślnych założeniach opartych na ustalonych konwencjach. Jeśli te założenia nie są dobrze udokumentowane lub zrozumiane, może to prowadzić do nieporozumień lub błędów. Deweloperzy muszą mieć głębokie zrozumienie konwencji, aby je skutecznie wykorzystać, co może być barierą w środowiskach współpracy [10] [8].
6. Nadmierne poleganie na wartości domyślnych **
W niektórych przypadkach programiści mogą zbyt mocno polegać na wartościach domyślnych dostarczanych przez COC bez pełnego zrozumienia podstawowych założeń. Może to prowadzić do nieoczekiwanego zachowania, jeśli domyślne nie są zgodne z konkretnymi potrzebami projektu. Na przykład, jeśli framework domyślnie zakłada pewną strukturę bazy danych, ale faktyczna struktura jest inna, wymagana jest dodatkowa konfiguracja, aby zastąpić te wartości domyślne [4] [11].
Podsumowując, chociaż konwencja nad konfiguracją oferuje wiele korzyści pod względem wydajności i spójności, może zawieść lub być mniej skuteczna w scenariuszach wymagających wysokiej elastyczności, złożonych konfiguracji lub gdy brakuje podstawowych konwencji.
Cytaty:[1] https://facilethings.com/blog/en/convention-over-configuration
[2] https://www.reddit.com/r/rails/comments/a68d7i/im_terrified_of_convention_over_configuration/
[3] https://www.devx.com/terms/convention-over-configuration/
[4] https://en.wikipedia.org/wiki/convention_over_configuration
[5] https://www.aspireedge.com/the-impact-of-convention-over-configuration-in-ruby-on-rails.html
[6] http://softwareengineering.vazexqi.com/files/pattern.html
[7] https://learn.microsoft.com/en-us/archive/msdn-magazine/2009/february/patterns-in-practice-convention-over-configuration
[8] https://devopedia.org/convention-over-configuration
[9] https://softwareengineering.stackexchange.com/questions/165649/is-convention-over-configuration-not-violating-basic-programing-principles
[10] https://techblog.bozho.net/a-problem-with-convention-over-configuration/
[11] https://stackoverflow.com/questions/71985512/convention-over-configuration-in-in-rails
[12] https://davewentzel.com/content/convention-over-configuration/