** Công ước về cấu hình (COC) là một mô hình thiết kế phần mềm nhằm đơn giản hóa sự phát triển bằng cách sử dụng các giả định và tiêu chuẩn được xác định trước, giảm số lượng các quyết định mà các nhà phát triển phải đưa ra. Mặc dù COC có thể nâng cao năng suất và tính nhất quán, nhưng có những tình huống có thể thất bại hoặc kém hiệu quả hơn:
1. Thiếu tính linh hoạt **
Một trong những lời chỉ trích chính của COC là tiềm năng của nó để hạn chế tính linh hoạt. Trong các môi trường cần các giải pháp độc đáo hoặc không chuẩn, tuân thủ nghiêm ngặt các quy ước có thể bị hạn chế. Chẳng hạn, nếu một dự án yêu cầu lược đồ cơ sở dữ liệu không tuân theo các quy ước đặt tên thông thường, cấu hình bổ sung là cần thiết, có thể bù đắp lợi ích của COC [5] [4].
2. Xung đột với các nguyên tắc thiết kế khác **
COC đôi khi có thể mâu thuẫn với các nguyên tắc thiết kế khác, chẳng hạn như nguyên tắc "rõ ràng tốt hơn so với tiềm ẩn" từ Zen of Python. Nguyên tắc này cho thấy rằng các cấu hình rõ ràng là thích hợp hơn các giả định ngầm, điều này có thể dẫn đến sự nhầm lẫn hoặc hành vi bất ngờ nếu không được ghi chép rõ ràng [9] [4].
3. Sự phức tạp trong các kịch bản không chuẩn **
Khi xử lý các kịch bản phức tạp hoặc không chuẩn, COC có thể không cung cấp tính linh hoạt cần thiết để xử lý các yêu cầu độc đáo một cách hiệu quả. Ví dụ, trong một hệ thống nơi nhiều cơ sở dữ liệu có cấu trúc lược đồ khác nhau cần được tích hợp, chỉ dựa vào các quy ước có thể dẫn đến sự thiếu hiệu quả hoặc độ phức tạp bổ sung [4] [10].
4. Đường cong học tập và nhận con nuôi **
Việc thực hiện COC đòi hỏi một mức độ quen thuộc nhất định với các công ước. Các nhà phát triển mới có thể thấy khó khăn khi học và thích nghi với các quy ước này, đặc biệt nếu chúng được sử dụng để các phương thức cấu hình rõ ràng hơn. Điều này có thể làm tăng đường cong học tập và có khả năng cản trở năng suất cho các thành viên trong nhóm mới [1] [4].
5. Giả định và tài liệu ngầm **
COC phụ thuộc rất nhiều vào các giả định ngầm dựa trên các quy ước đã được thiết lập. Nếu những giả định này không được ghi chép lại hoặc hiểu rõ, nó có thể dẫn đến những hiểu lầm hoặc lỗi. Các nhà phát triển cần có một sự hiểu biết sâu sắc về các quy ước để sử dụng chúng một cách hiệu quả, đây có thể là một rào cản trong môi trường hợp tác [10] [8].
6.
Trong một số trường hợp, các nhà phát triển có thể phụ thuộc quá nhiều vào các mặc định được cung cấp bởi COC mà không hiểu đầy đủ các giả định cơ bản. Điều này có thể dẫn đến hành vi bất ngờ nếu mặc định không phù hợp với nhu cầu cụ thể của dự án. Chẳng hạn, nếu một khung giả định một cấu trúc cơ sở dữ liệu nhất định theo mặc định, nhưng cấu trúc thực tế là khác nhau, cấu hình bổ sung được yêu cầu để ghi đè các mặc định này [4] [11].
Tóm lại, trong khi quy ước về cấu hình mang lại nhiều lợi ích về năng suất và tính nhất quán, nó có thể thất bại hoặc kém hiệu quả trong các kịch bản đòi hỏi tính linh hoạt cao, cấu hình phức tạp hoặc khi thiếu hiểu biết về các quy ước cơ bản.
Trích dẫn:[1)
.
.
[4] https://en.wikipedia.org/wiki/convent_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/convented-over-configuration
[9] https://softwareengineering.stackexchange.com/questions/165649/is-convention-over-configuration-not-violating-basic-programming-principles
.
[11)
.