被神化的架构及被夸大的CTRL+C和CTRL+V

为什么我想谈谈架构,和代码的复制粘贴这两个话题呢,主要是前几天看到一篇文章提到这两个话题,在这里想谈谈我的一些看法。

很多新人,都很谈架构,好象贴了架构这个标签就显示高档似的,把设计模式当作圣经,实在可笑。做架构,不是捧着书,然后闭门苦思就能想出来的。

架构是做出来的,不是设计出来的

架构,说穿了就是解耦,把变化的东西抽离出来,这个是它的本质。一般来说,越接近底层的东西越是稳定,越接近业务层的东西越容易变化。如果想在业务层上作封装,也就是说想作架构设计,必须充分了解业务,没有足够的编码经验是不可能做好的。所以我经常说,架构不是设计出来的,而是做出来的,只要你做完了,整个业务都确定了下来了,了解充分了,你才可能设计出合理的架构。因为,架构是依赖于需求的,都需求没有确定下来的情况下做架构,需求一变,那些所谓的架构不是要改得一踏糊涂,最后连自己都看不下去了,再推倒重来。事实上,应该是在项目的后期,完工了,业务流程也确定了,这个时候才有架构可谈。

架构设计,还要考虑成本,很多新手,往往会忽视这个问题,也就是说,你必须考虑做这个架构要花多少时间,能节省多少时间。如果花费远大于收益,那就没有意义了。但是他们往往会解释,现在多花点时间,后期就能少花很多时间了。但是事实往往是,前期多花时间,后期也多花时间,老是想让这个架构变得更完美而沉迷其中,不能自拔。我们往往过度沉迷于架构,而忘了做项目的目的。做项目的,是为了解决客户业务上的问题,能够提高他们的业务水平,这才是本质。

架构,其实没啥的,你的代码看得多了,写得多了,自然就会有架构了,记住封装变化这个核心就行了。其实阅读代码、分析代码、编写代码都是真正的基本功,正所谓“练拳不练功,到老一场空”,写程序也是,作为新人,应该多花时间去阅读代码,编写代码上面,把自己的基本功练扎实才是最为重要的。

代码的复制、粘贴不是洪水猛兽

很多人都习惯性地鄙视CTRL+C,CTRL+V,好象一旦和它们沾边,就是烂代码,其实大可不必。我们考虑一下,为什么不能CTRL+C,CTRL+V 呢?因为这些代码不好维护,打个比方说,有两处相同的代码,那么有可能就要改两处。但是,你们有没有碰到这么一种情况呢,我们先来假设一下,有三个地方,A、B,C,都调用到一个函数,这个函数称为 M 吧。

但是,不久之后,接到一个需求上的变化,A 的业务改变了,需要修改 M 的函数,但B,C 的没有变,那么我们习惯性的在函数 M 里加个 if 来判断,如果是 A 的业务,就如何如何。

不久之后,又收到需求变化,B 的业务改变了,那么习惯性的,又会在 M 函数里加一个 if 逻辑块。

不久之后,又收到需求变化,C 的业务改变了,那么习惯性的,又会在 M 函数里加一个 if 逻辑块。

请问,这样 M 函数充满这么多的 if ,还容易维护吗?还不如写成三个函数呢。

所以,我们大可不必视复制粘贴为洪水猛兽,只要在可控的范围内就行了,当然,如果业务确定下来是不会变化的,还是一个。什么是可控呢?我觉得复制只有两、三个地方,都问题不大。总之,存在这是合理,很多时候,我们总习惯于高估自己,而低估别人。

更多精彩内容:http://www.bianceng.cnhttp://www.bianceng.cn/Programming/project/

时间: 2025-01-20 20:31:33

被神化的架构及被夸大的CTRL+C和CTRL+V的相关文章

MySQL 架构

原文:MySQL 架构 MySQL架构和结构分析 官方架构图: MySQL DB 各模块架构图如下:   MySQL安装方式 MySQL初始化 简介:什么是事务: 事务: ACID :  事务确保了银行不会弄丢你的钱,而这种特性在应用逻辑设计中是很难实现的,甚至不可实现.一个ACID兼容的数据库服务器,要为事务处理大量的复杂工作确保ACID特性的实现,而这也许是用户未能察觉到的. 事务: ACID : A :原子性(Atomicity) :一个事务必须被视为一个单独的内部"不可分"的工

程序员成长规划

引言 我的程序员成长之路 程序员的成长经历往往很相似,大部分的人走过了最前面相同的一段路,而有的人则走得更远.总结自己这些年来的历程,这也许能让年轻的程序员少走一些弯路,成长得更快:或许更好一些,能让大家从中得到一些启发,早日进入优秀程序员的阶段,实现梦想,释放激情. 第一阶段,最初是在学校里学习计算机基础知识,学习经典的程序设计语言,编写测试用的小程序.这个过程可以说是对计算机和程序设计的入门阶段.这个阶段主要是培养了自己对计算机软件的兴趣,打下了良好的计算机基础知识. 第二阶段,而后参加工作

外媒:证明ARM是错的 要为英特尔“平反”

随着ARMhttp://www.aliyun.com/zixun/aggregation/17728.html">架构处理器在移动市场的崛起,英特尔所坚持的x86架构似乎被认为是错的,一直以来也有不少人坚持这样的观点,Seeking Alpha作者Ashraf Eassa近日却撰文表示,ARM是错的,ARM在PC领域和服务器领域会很快消亡,而英特尔则将在平板和手机领域获得更多的份额,以下是原文: 我 欣赏ARM公司如今的成绩和产品,但是我对其首席执行官近年来宣称"ARM指令集架构

Greys Java在线问题诊断工具

线上系统为何经常出错?数据库为何屡遭黑手?业务调用为何频频失败?连环异常堆栈案,究竟是那次调用所为? 数百台服务器意外雪崩背后又隐藏着什么?是软件的扭曲还是硬件的沦丧? 走进科学带你了解Greys, Java线上问题诊断工具. Greys的诞生 很早的时候,我们使用BTrace排查问题,在感叹BTrace的强大之余,也曾好几次将线上系统折腾挂掉.2012年淘宝的聚石写了HouseMD,将常用的几个Btrace脚本整合在一起形成一个独立风格的应用,但其核心代码用的是Scala,我们没这方面的编程维

一个体现Java接口及工厂模式优点的例子

随着模式概念的普及,了解模式和使用模式的程序员越来越多,很多人在学习模式的时候,都会有这样一种疑惑:"有必要搞得这么复杂吗?".的确,因为教程的例子过于简单化(这样方便读者学习),或者是作者选例子的时候并没有很好体现所讲模式的优点,很多情况下如果仅就其例子的问题来说,用模式是太复杂了.因此才导致这样的误解:"模式就是把简单的问题复杂化吗?".当然不是,随着你开发实践的不断丰富,你终会发现模式强大威力,而且模式也并非贵族化的编程方式,它就是一些经过提炼了的解决问题的方

WebServices入门

services|web [pre]WebServices入门 --理论篇 瑞联科技(中国)有限公司 李春林[/pre]本文档是用ctrl+c -> ctrl+v产生出来的入门级文档,主要是想说明什么是webservices,webservices的架构,以及几个相关的xml文档.由于小弟知识及技术非常有限,文中不妥之处请各位兄台指正,小弟在此谢过啦.什么是webservices? 从表面上看:Webservices 就是一个应用程序,它向外界暴露出一个能够通过Web进行调用的API.这就是说,

Ansible权威指南.

Linux/Unix技术丛书 Ansible权威指南 李松涛 魏 巍 甘 捷 著 图书在版编目(CIP)数据 Ansible权威指南 / 李松涛,魏巍,甘捷著. -北京:机械工业出版社,2016.11 (Linux/Unix技术丛书) ISBN 978-7-111-55329-8 I. A- II. ①李- ②魏- ③甘- III. 程序开发工具-指南 IV. TP311.561-62 中国版本图书馆CIP数据核字(2016)第258615号 Ansible权威指南 出版发行:机械工业出版社(北

10个深度学习软件的安装指南(附代码)

由于近期论文的需要,我搭建了一个基于 Ubuntu 和英伟达的深度学习环境.尽管已经有很多非常棒的关于英伟达驱动和 CUDA 的安装指南, 但依然没有详尽的深度学习环境搭建指南.另外,我需要查阅很多文档来熟悉细节,其中一些细节还有待完善,甚至还有一些包含语法错误.因此我决定把我这段时间查阅的文档(见参考链接)做个总结. 该指南会安装如下内容 操作系统(Ubuntu) 4 个驱动和库 5 个 Python DL 库(TensorFlow,Theano,CNTK,Keras 和 PyTorch) 下

Linux发展史精简总结

说明:     往前对Linux的历史模模糊糊,一知半解的,于是决定要根据自己的理解把Linux的发展史稍微总结一下,这样总结下来,感觉Linux的发展是一条非常完美的线,而自己对于Linux的理解又加深了很多,个人觉得这样对学好Linux是非常有帮助的,同时也希望可以帮助网友在对Linux发展史的理解上能有一个较为清晰简洁的概念和思路. 一.Linux发展简史 1.1969年以前:Bell,MIT与GE的"Mutics"系统 Bell:贝尔实验室,隶属于AT&T公司 MIT: