约定优于配置_动力节点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进行子查询
阿里云网站搭建费用解析:服务器价格与建站成本优化指南

