约定优于配置_动力节点Java学院整理

发布时间 - 2026-01-11 02:44:49    点击率:

开始尝试使用Maven构建项目的时候,惊讶于只需要简单的几行xml就可以完成原来ant需要大量xml才能完成的工作。不得不说,人们在经过一定技术积累后,总能想到办法简化自己的工作。以前做项目,总是写Ant配置文件,满足于自己更灵活的配置,而没有去思考,这么做到底值不值得。

想象一下,如果我们每个人都满足于自己的私欲,为所欲为,我们的世界会乱成什么样子?在软件世界里,如果每个程序员都定义一套自己的规范,那么我们的软件会乱成什么样子?各个版本的浏览器就已经让众多程序员头痛不已了,更别提其他的了。想到这,你有没有感觉,其实java的成功,xml的成功,maven的成功都有其必然性,他们的设计理念都包含一个很简单但很深刻的道理,那就是“通用”。

为什么通用?因为遵循约定。

通用又会带来另一个好处,那就是学习成本低,当新人加入的时候,很容易上手,主要他了解约定,或者说规范就可以了。对比一下相同项目的ant脚本和maven脚本,也就是build.xml和pom.xml,你就会明白,我为什么说学习成本低了。如果没有约定,没有构建标准,n个项目可以能就要有n中项目目录结构,n种构建方式。

这种遵循约定写xml配置的方式就是最优的了吗?只能说是相对罢了。如果我们严格遵循约定,甚至可以省略掉xml的编写,因为xml可能会带来管理上的混乱。

众多javaweb的程序员一定都有编写ssh的xml配置文件的经历,而不知道你是否了解Rails。

Rails 的核心理念也是约定优于配置,这意味着在Rails中不会出现XML配置文件。Rails使用Web应用多年来积累的各种常见约定(更具体地说是命名规则)来代替XML配置文件,而在Rails内部的映射与发现机制根据这些约定可以实现对象之间的关联。

使用约定来代替XML配置文件说明Rails本身完成了大量的底层工作,这意味着使用更少的代码来实现应用程序是极有可能的。此外,代码量的缩减也减小了出现bug的可能性,降低了维护程序和升级程序的难度。

如果你有一种“强迫症”,发现程序员多少都有点强迫症,哈哈,就是不愿意遵循约定怎么办?我只能再写几句来试图说服你。你真的需要那么做吗?你真的需要那么个性吗?个性意味着什么?没有通用性。没有通用性意味着什么?死亡。你可能还会质疑,微软的很多东西都没有通用性,只能运行于windows平台,照样活得好好的。但你有没有想过全球那么多windows用户,windows的通用性是不可质疑的,间接使运行在它之上的软件拥有了一定的通用性。如果你还要再举苹果,好吧,朋友,你极端了。个性意味着复杂,没有人喜欢复杂的东西。

既然遵循约定那么有优势,是不是我们就该放弃配置,以约定为王?还得用maven和ant来说事。如果你目前的构建包含一些高度自定义的过程,或者你的项目结构不能轻易变更为maven规定的项目结构,或者你已经写了一些 Ant 脚本通过一种明确的方法完成一个明确的过程,而这种过程不适合 Maven 标准,你仍然可以使用ANT,或者将ANT脚本作为Maven的一个插件。从这个角度来看,约定不能干所有事情,总有一些是需要你自定义完成的。

综上,遵循约定虽然损失了一定的灵活性,但可以减少配置,降低复杂性,降低学习成本呢,使程序更优美。所以,我更倾向于约定优于配置。


# 约定优于配置  # 自己的  # 配置文件  # 如果你  # 都有  # 你真  # 自定义  # 你有没有  # 就可以  # 意味着什么  # 满足于  # 乱成  # 那就是  # 他们的  # 强迫症  # 这意味着  # 每个人  # 还会  # 要有  # 那么多  # 有一种 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: 厦门模型网站设计制作公司,厦门航空飞机模型掉色怎么办?  如何在Ubuntu系统下快速搭建WordPress个人网站?  浏览器如何快速切换搜索引擎_在地址栏使用不同搜索引擎【搜索】  Laravel如何实现API版本控制_Laravel API版本化路由设计策略  logo在线制作免费网站在线制作好吗,DW网页制作时,如何在网页标题前加上logo?  Windows10如何删除恢复分区_Win10 Diskpart命令强制删除分区  如何快速辨别茅台真假?关键步骤解析  如何在云指建站中生成FTP站点?  如何破解联通资金短缺导致的基站建设难题?  C#如何调用原生C++ COM对象详解  网站制作公司哪里好做,成都网站制作公司哪家做得比较好,更正规?  详解ASP.NET 生成二维码实例(采用ThoughtWorks.QRCode和QrCode.Net两种方式)  如何快速搭建自助建站会员专属系统?  php中::能调用final静态方法吗_final修饰静态方法调用规则【解答】  公司网站制作价格怎么算,公司办个官网需要多少钱?  Laravel如何实现用户角色和权限系统_Laravel角色权限管理机制  5种Android数据存储方式汇总  Laravel如何配置任务调度?(Cron Job示例)  Laravel怎么为数据库表字段添加索引以优化查询  如何在IIS管理器中快速创建并配置网站?  焦点电影公司作品,电影焦点结局是什么?  如何用AI帮你把自己的生活经历写成一个有趣的故事?  Laravel如何实现API资源集合?(Resource Collection教程)  DeepSeek是免费使用的吗 DeepSeek收费模式与Pro版本功能详解  Laravel如何实现多对多模型关联?(Eloquent教程)  android nfc常用标签读取总结  浅谈redis在项目中的应用  利用JavaScript实现拖拽改变元素大小  Laravel如何正确地在控制器和模型之间分配逻辑_Laravel代码职责分离与架构建议  如何在Windows环境下新建FTP站点并设置权限?  免费视频制作网站,更新又快又好的免费电影网站?  消息称 OpenAI 正研发的神秘硬件设备或为智能笔,富士康代工  Laravel Seeder怎么填充数据_Laravel数据库填充器的使用方法与技巧  Laravel如何处理CORS跨域请求?(配置示例)  Python自然语言搜索引擎项目教程_倒排索引查询优化案例  Android中AutoCompleteTextView自动提示  如何批量查询域名的建站时间记录?  今日头条AI怎样推荐抢票工具_今日头条AI抢票工具推荐算法与筛选【技巧】  Laravel如何优雅地处理服务层_在Laravel中使用Service层和Repository层  香港服务器网站卡顿?如何解决网络延迟与负载问题?  音乐网站服务器如何优化API响应速度?  Laravel与Inertia.js怎么结合_使用Laravel和Inertia构建现代单页应用  如何自定义safari浏览器工具栏?个性化设置safari浏览器界面教程【技巧】  微信小程序 wx.uploadFile无法上传解决办法  Thinkphp 中 distinct 的用法解析  如何做网站制作流程,*游戏网站怎么搭建?  Laravel怎么调用外部API_Laravel Http Client客户端使用  EditPlus中的正则表达式实战(5)  Laravel如何使用Eloquent进行子查询  阿里云网站搭建费用解析:服务器价格与建站成本优化指南