架构师应该遵守的编程原则
大家好,我是顶级架构师。
目录
KISS(Keep It Simple Stupid)
DRY(Don’t Repeat Yourself)
YAGNI – You ain’t gonna need it
Code For The Maintainer
Be as lazy as possible.
Programming is only the road, not the way.
If you are in a hurry, stroll along slowly. If you really are in a hurry, make a detour.
Know your path, Neo.
If it wasn’t tested, it is broken.
与程序沟通时分辨原因和结果,与人交流时要分辨事实和观点
KISS(Keep It Simple Stupid)
Don’t Make Me Think:如果一段程序对于阅读者来说需要花费太多的努力才能理解,那它很可能需要进一步简化。 最少意外原则:程序代码应尽可能的不要让阅读者感到意外。也就是说应该遵循编码规范和常见习惯,按照公认的习惯方式进行组织和命名,不符常规的编程动作应该尽可能的避免。
要谦虚,不要认为自己是个天才,这是你第一个误解。只有谦虚了,你才能真正达到超级天才的水平,即使不行,who cares!你的代码那么stupid simple,所以你不需要是个天才! 将你的任务分解为4-12小时的子任务。 把你的问题拆分成多个小问题。每个问题用一个或者很少的几个类来解决掉。 保持你的方法足够小,每个方法永远不要超过30-40行代码。每个方法都应该只处理一个小小的问题,不要搞太多uses case进去。如果你的方法中有多个分支,尝试把他们拆分成多个小的方法。这样不仅容易阅读和维护,找bug也更快。慢慢的你将学会爱。 让你的类也小点,原则和上面的方法是一样的。 先解决问题,然后开始编码。不要一边编码,一边解决问题。这样做也没什么错,但你有能力提前把事情切分成多个小的块,然后开始编码可能是比较好的。但也请你不要害怕一遍遍重构你的代码。另外行数还不是为了衡量质量的标准,只是有个基本的尺子而已。 不要害怕干掉代码。重构和重做是两个非常重要的方面。如果你遵循上面的建议,重写代码的数量将会最小化,如果你不遵循,那么代码很可能会被重写。 其他的任何场景,都请你尝试尽可能的简单,simple,这也是最难的一步,但一旦你拥有了它,你再回头看,就会说,之前的事情就是一坨屎。
参考链接:Do The Simplest Thing That Could Possibly Work:http://c2.com/xp/DoTheSimplestThingThatCouldPossiblyWork.html
DRY(Don’t Repeat Yourself)
尽可能的减少重复,如代码重复、文档重复、数据重复、表征重复、开发人员重复(相同的功能不能的开发人员的优自己的实现) 不重复造轮子,能够使用开源的解决方案的情况下没有必要再实现一遍。 重复的事项,尽可能的使用自动化程序解决。 不要过于优化,过度追求DRY,破坏了程序的内聚性。
相关规则有:
代码复用:http://en.wikipedia.org/wiki/Code_reuse
YAGNI – You ain’t gonna need it
更少的代码维护 更少的代码测试 事情发生变化时更少的代码可重构 更多时间用于更重要的功能 更多时间用于文档编制
节省了编译/移植的时间 节省了测试运行的时间 生成时/运行时节省了资源 不必以某种方式保留的知识
Code For The Maintainer
为维护者编写程序。比如让代码有自解释的功能。在你编写代码的时候永远记得将来需要维护他。
参考链接:Code For The Maintainer:http://wiki.c2.com/?CodeForTheMaintainer
Be as lazy as possible.
人类因“偷懒”而进步。懒惰只是创造了需求。需求本身并不算进步。满足需求形成了进步。另外,搜索公众号后端架构师后台回复“架构整洁”,获取一份惊喜礼包。
偷懒还包括:
不要重复发明轮子
过度优化是万恶之源
参考链接:
Do The Simplest Thing That Could Possibly Work:
http://c2.com/xp/DoTheSimplestThingThatCouldPossiblyWork.html
Programming is only the road, not the way.
If you are in a hurry, stroll along slowly.
If you really are in a hurry, make a detour.
Know your path, Neo.
If it wasn’t tested, it is broken.
如果没有经过测试的代码都是不能运行的。
与程序沟通时分辨原因和结果,与人交流时要分辨事实和观点
最小化耦合关系:代码片段(代码块,函数,类等)应该最小化它对其它代码的依赖。这个目标通过尽可能少的使用共享变量来实现。 最大化内聚性:具有相似功能的代码应该放在同一个代码组件里。 开放/封闭原则:程序里的实体项(类,模块,函数等)应该对扩展行为开放,对修改行为关闭。换句话说,不要写允许别人修改的类,应该写能让人们扩展的类。 单一职责原则:一个代码组件(例如类或函数)应该只执行单一的预设的任务。 隐藏实现细节:隐藏实现细节能最小化你在修改程序组件时产生的对那些使用这个组件的其它程序模块的影响。 笛米特法则(Law of Demeter)— 程序组件应该只跟它的直系亲属有关系(例如继承类,内包含的对象,通过参数入口传入的对象等。)
欢迎大家进行观点的探讨和碰撞,各抒己见。如果你有疑问,也可以找我沟通和交流。扩展:接私活儿
最后给读者整理了一份BAT大厂面试真题,需要的可扫码回复“面试题”即可获取。
「顶级架构师」建立了读者架构师交流群,大家可以添加小编微信进行加群。欢迎有想法、乐于分享的朋友们一起交流学习。
扫描添加好友邀你进架构师群,加我时注明【姓名+公司+职位】
版权申明:内容来源网络,版权归原作者所有。如有侵权烦请告知,我们会立即删除并表示歉意。谢谢。
猜你还想看
牛逼!接私活必备的 N 个系统项目!赶快收藏吧(附源码合集第 3 期)!
Spring Boot + Redis 实现各种操作,写得太好了吧!