什么是“按约定编码”?
Posted
技术标签:
【中文标题】什么是“按约定编码”?【英文标题】:What is "coding by convention"? 【发布时间】:2010-10-28 11:04:08 【问题描述】:我一直在查看 Grails 上的 Groovy,并注意到底部有一行:
Grails 旨在将“按惯例编码”范式引入 Groovy。
究竟什么是约定俗成的编码?
【问题讨论】:
【参考方案1】:Convention over Configuration(又名 Coding by Convention)是一种软件设计范式,旨在减少开发人员需要做出的决策数量,获得简单性,但不一定失去灵活性。
这句话本质上意味着开发人员只需要指定应用程序的非常规方面。例如,如果模型中有一个类Sale,则数据库中对应的表默认称为sales。只有当人们偏离这一约定时,例如调用表“products_sold”,才需要编写有关这些名称的代码。
当您使用的工具实现的约定与您期望的行为相匹配时,您无需编写配置文件即可享受好处。当您想要的行为偏离实现的约定时,您可以配置您想要的行为。
来自"Convention over configuration" article on Wikipedia。
【讨论】:
现在的***文章并不是一个很好的例子。应该考虑这里的其他答案。【参考方案2】:在 Grails 的上下文中,“按约定编码”意味着大量(乏味和重复的)显式代码和/或配置被简单的命名和目录结构约定所取代。例如:
在 grails-app/controllers 目录中名称以 Controller 结尾的任何类都会自动成为 Spring 控制器,并且其中定义的闭包将绑定到 URL - 您不必像以前那样在 XML 文件中进行配置使用纯 Spring 时。 taglibs(grails-app/taglib 目录)也是如此 - 不再需要繁琐的 TLD 文件! grails-app/domain 中的域类可能具有最“约定俗成的魔力”,它会自动映射到自动生成的 DB 模式 - 按照约定,DB 表和列名称与域属性名称相同。【讨论】:
【参考方案3】:按约定编码与按配置编码: 您对东西有一定的放置或命名约定的想法,因此您不必明确告诉程序东西在哪里或叫什么。 例如,在 ASP.Net MVC 中,对于视图的存储位置和调用方式有一个约定。这意味着当您的代码指示服务器返回视图时,运行时将在某些文件夹中查找具有特定命名结构的视图。请参阅this pdf 中的第 20 页了解更多信息。
另一个例子是方法的命名约定。例如,在事件驱动的语言中,您可以选择显式声明哪个方法处理哪些事件,或者您可以依赖命名约定 - 例如 ..._OnOpen 或 ...OnClick,然后依赖运行时来确定调用给定事件的正确方法。
【讨论】:
【参考方案4】:这里有很多约定:
-
如何命名 html 元素,以便它们可以作为 HTTP 请求的参数轻松访问;
如何将对象属性与数据库中的表名和列名相关联;
如何将项目安排到目录/包中;
当您发现自己以特定方式解决常见问题时,您就会这样做。您会注意到相似之处并将它们编入一些自动化方案中。
【讨论】:
【参考方案5】:见Convention over Configuration。这是设计工具或框架以将最常见的配置选项作为默认值的概念,因此对于绝大多数用户而言,不需要配置。
【讨论】:
现在的***文章并不是一个很好的例子。应该考虑这里的其他答案。【参考方案6】:这意味着,如果您遵守所使用的任何基于约定的框架所定义的某些编码约定,您将免费获得许多功能。换句话说,如果你按照框架的预期来构建你的应用程序,可以节省很多工作。
查看按惯例编码的优缺点是个好主意。
【讨论】:
你的回答太抽象,没有例子。它只是重申其他人所说的话。以上是关于什么是“按约定编码”?的主要内容,如果未能解决你的问题,请参考以下文章