Home Arrow Icon Knowledge base Arrow Icon Global Arrow Icon Μπορείτε να δώσετε παραδείγματα για το πότε μπορεί να αποτύχει η σύμβαση μέσω της διαμόρφωσης


Μπορείτε να δώσετε παραδείγματα για το πότε μπορεί να αποτύχει η σύμβαση μέσω της διαμόρφωσης


** Σύμβαση για τη διαμόρφωση (COC) είναι ένα πρότυπο σχεδιασμού λογισμικού που στοχεύει στην απλοποίηση της ανάπτυξης χρησιμοποιώντας προκαθορισμένες υποθέσεις και πρότυπα, μειώνοντας τον αριθμό των αποφάσεων που πρέπει να κάνουν οι προγραμματιστές. Ενώ η COC μπορεί να ενισχύσει την παραγωγικότητα και τη συνέπεια, υπάρχουν σενάρια όπου μπορεί να αποτύχει ή να είναι λιγότερο αποτελεσματική:

1. Έλλειψη ευελιξίας **

Μία από τις πρωταρχικές επικρίσεις του COC είναι η δυνατότητα να περιορίσει την ευελιξία. Σε περιβάλλοντα όπου απαιτούνται μοναδικές ή μη τυποποιημένες λύσεις, η προσκόλληση αυστηρά σε συμβάσεις μπορεί να είναι περιοριστική. Για παράδειγμα, εάν ένα έργο απαιτεί ένα σχήμα βάσης δεδομένων που δεν ακολουθεί τις συμβατικές συμβάσεις ονομασίας, είναι απαραίτητη πρόσθετη διαμόρφωση, η οποία μπορεί να αντισταθμίσει τα οφέλη του COC [5] [4].

2. Συγκρούσεις με άλλες αρχές σχεδιασμού **

Η COC μπορεί μερικές φορές να έρχεται σε σύγκρουση με άλλες αρχές σχεδιασμού, όπως η "ρητή είναι καλύτερη από τη σιωπηρή" αρχή από το Zen της Python. Αυτή η αρχή υποδηλώνει ότι οι ρητές διαμορφώσεις είναι προτιμότερες από τις σιωπηρές υποθέσεις, οι οποίες μπορούν να οδηγήσουν σε σύγχυση ή απροσδόκητη συμπεριφορά, αν όχι καλά τεκμηριωμένες [9] [4].

3. Πολυπλοκότητα σε μη τυποποιημένα σενάρια **

Όταν ασχολείται με σύνθετα ή μη τυποποιημένα σενάρια, η COC ενδέχεται να μην παρέχει την απαραίτητη ευελιξία για να χειριστεί αποτελεσματικά τις μοναδικές απαιτήσεις. Για παράδειγμα, σε ένα σύστημα όπου πρέπει να ενσωματωθούν πολλαπλές βάσεις δεδομένων με διαφορετικές δομές σχήματος, η βασιζόμενη αποκλειστικά στις συμβάσεις θα μπορούσε να οδηγήσει σε αναποτελεσματικότητα ή πρόσθετη πολυπλοκότητα [4] [10].

4. Καμπύλη μάθησης και υιοθεσία **

Η εφαρμογή COC απαιτεί ένα ορισμένο επίπεδο εξοικείωσης με τις ίδιες τις συμβάσεις. Οι νέοι προγραμματιστές μπορεί να θεωρούν ότι είναι δύσκολο να μάθουν και να προσαρμοστούν σε αυτές τις συμβάσεις, ειδικά εάν χρησιμοποιούνται για πιο σαφείς μεθόδους διαμόρφωσης. Αυτό μπορεί να αυξήσει την καμπύλη μάθησης και ενδεχομένως να εμποδίσει την παραγωγικότητα για τα νέα μέλη της ομάδας [1] [4].

5. Οι έμμεσες υποθέσεις και τεκμηρίωση **

Η COC εξαρτάται σε μεγάλο βαθμό από σιωπηρές υποθέσεις που βασίζονται σε καθιερωμένες συμβάσεις. Εάν αυτές οι υποθέσεις δεν είναι καλά τεκμηριωμένες ή κατανοητές, μπορεί να οδηγήσει σε παρεξηγήσεις ή σφάλματα. Οι προγραμματιστές πρέπει να έχουν μια βαθιά κατανόηση των συμβάσεων για να τις χρησιμοποιήσουν αποτελεσματικά, γεγονός που μπορεί να αποτελέσει εμπόδιο σε συνεργατικά περιβάλλοντα [10] [8].

6.

Σε ορισμένες περιπτώσεις, οι προγραμματιστές ενδέχεται να βασίζονται σε υπερβολικά τις προεπιλογές που παρέχονται από την COC χωρίς να κατανοήσουν πλήρως τις υποκείμενες υποθέσεις. Αυτό μπορεί να οδηγήσει σε απροσδόκητη συμπεριφορά εάν οι προεπιλογές δεν ευθυγραμμιστούν με τις συγκεκριμένες ανάγκες του έργου. Για παράδειγμα, εάν ένα πλαίσιο προϋποθέτει μια συγκεκριμένη δομή βάσης δεδομένων από προεπιλογή, αλλά η πραγματική δομή είναι διαφορετική, απαιτείται πρόσθετη διαμόρφωση για να παρακάμψει αυτές τις προεπιλογές [4] [11].

Συνοπτικά, ενώ η σύμβαση μέσω διαμόρφωσης προσφέρει πολλά οφέλη όσον αφορά την παραγωγικότητα και τη συνέπεια, μπορεί να αποτύχει ή να είναι λιγότερο αποτελεσματική σε σενάρια που απαιτούν υψηλή ευελιξία, σύνθετες διαμορφώσεις ή όταν υπάρχει έλλειψη κατανόησης των υποκείμενων συμβάσεων.

Αναφορές:
[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.aspiredge.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-vioalating-basic-programming-principles
[10] https://techblog.bozho.net/a-problem-with-convention-over-configuration/
[11] https://stackoverflow.com/questions/71985512/convention-over-configuration-in-rails
[12] https://davewentzel.com/content/convention-over-configuration/