**关于配置的惯例(COC)是一种软件设计范式,旨在通过使用预定义的假设和标准来简化开发,从而减少开发人员必须做出的决策数量。尽管COC可以提高生产率和一致性,但在某些情况下可能会失败或效率较低:
1。缺乏灵活性**
COC的主要批评之一是其限制灵活性的潜力。在需要独特或非标准解决方案的环境中,严格遵守惯例可能是限制的。例如,如果一个项目需要一个不遵循常规命名约定的数据库架构,则需要附加配置,这可以抵消COC的好处[5] [4]。
2。与其他设计原则发生冲突**
COC有时会与其他设计原则发生冲突,例如从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_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-on-rails.html
[6] http://softwareengineering.vazexqi.com/files/pattern.html
[7] https://learn.microsoft.com/en-us/archive/msdn-magazine/2009/february/patterns-inpatrens-in-practice-convention-convention-over-configuration
[8] https://devopedia.org/convention-over-configuration
[9] https://softwareengineering.stackexchange.com/questions/165649/is-convention-convention-convention-over-configuration-not-violation-basic-basic-basic-programmming-proncmming-pronciples
[10] https://techblog.bozho.net/a-problem-with-convention-over-configuration/
[11] https://stackoverflow.com/questions/71985512/convention-convention-over-configuration-in-rails
[12] https://davewentzel.com/content/convention-over-configuration/