约定优于配置_动力节点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 】
相关推荐:
如何在阿里云虚拟主机上快速搭建个人网站?
JavaScript常见的五种数组去重的方式
如何快速查询域名建站关键信息?
如何自定义建站之星网站的导航菜单样式?
家族网站制作贴纸教程视频,用豆子做粘帖画怎么制作?
Laravel如何创建和注册中间件_Laravel中间件编写与应用流程
极客网站有哪些,DoNews、36氪、爱范儿、虎嗅、雷锋网、极客公园这些互联网媒体网站有什么差异?
无锡营销型网站制作公司,无锡网选车牌流程?
如何在阿里云完成域名注册与建站?
Win11关机界面怎么改_Win11自定义关机画面设置【工具】
Laravel模型事件有哪些_Laravel Model Event生命周期详解
如何快速搭建虚拟主机网站?新手必看指南
Laravel如何实现RSS订阅源功能_Laravel动态生成网站XML格式订阅内容【教程】
Windows11怎样设置电源计划_Windows11电源计划调整攻略【指南】
Laravel怎么使用Markdown渲染文档_Laravel将Markdown内容转HTML页面展示【实战】
今日头条AI怎样推荐抢票工具_今日头条AI抢票工具推荐算法与筛选【技巧】
Midjourney怎样加参数调细节_Midjourney参数调整技巧【指南】
Win11怎么查看显卡温度 Win11任务管理器查看GPU温度【技巧】
如何在橙子建站上传落地页?操作指南详解
Laravel如何生成API文档?(Swagger/OpenAPI教程)
Laravel如何实现API版本控制_Laravel API版本化路由设计策略
Laravel的路由模型绑定怎么用_Laravel Route Model Binding简化控制器逻辑
Laravel如何使用Eloquent进行子查询
如何快速查询网址的建站时间与历史轨迹?
海南网站制作公司有哪些,海口网是哪家的?
Swift开发中switch语句值绑定模式
什么是JavaScript解构赋值_解构赋值有哪些实用技巧
如何做网站制作流程,*游戏网站怎么搭建?
深入理解Android中的xmlns:tools属性
如何快速登录WAP自助建站平台?
javascript基于原型链的继承及call和apply函数用法分析
Laravel事件监听器怎么写_Laravel Event和Listener使用教程
Laravel如何集成第三方登录_Laravel Socialite实现微信QQ微博登录
googleplay官方入口在哪里_Google Play官方商店快速入口指南
Laravel如何升级到最新版本?(升级指南和步骤)
如何在阿里云高效完成企业建站全流程?
专业企业网站设计制作公司,如何理解商贸企业的统一配送和分销网络建设?
Claude怎样写约束型提示词_Claude约束提示词写法【教程】
Laravel如何处理JSON字段_Eloquent原生JSON字段类型操作教程
Laravel如何处理文件下载请求?(Response示例)
如何在橙子建站中快速调整背景颜色?
深圳网站制作培训,深圳哪些招聘网站比较好?
潮流网站制作头像软件下载,适合母子的网名有哪些?
如何在 Go 中优雅地映射具有动态字段的 JSON 对象到结构体
Laravel怎么生成二维码图片_Laravel集成Simple-QrCode扩展包与参数设置【实战】
VIVO手机上del键无效OnKeyListener不响应的原因及解决方法
如何快速搭建二级域名独立网站?
Laravel如何与Pusher实现实时通信?(WebSocket示例)
ai格式如何转html_将AI设计稿转换为HTML页面流程【页面】
Laravel项目如何进行性能优化_Laravel应用性能分析与优化技巧大全

