这篇让我们看看那些有意思的架构原则。俗话说嘛,不懂架构原则的项目经理不是好产品!

1. Kiss 原则

先温习一下 Kiss 原则——Keep it simple and stupid。

含义:

不要开始就上大而全、复杂的架构,而要随着需求和业务的变化,让架构自然生长演进。只要能满足现有需求,就不引入不必要的复杂性。保持系统的简单甚至是我们的目标。

Kiss 原则被很多架构师推崇,甚至有产品经理说这最早产品设计的一个原则。举一个最常见的例子你就知道了,谷歌的主页和苹果的ipad的一个按钮 。

在我们应用 Kiss 的过程中,能给大家的建议是:

1,简单的含义要理解为在“人”的层面对系统的理解简单,而不是在机器层面。那可能意味着我们要做更多的面向对象操作,最新的“领域驱动设计”了解一下。其实很多科技的发明,许多创新都可以归为“与人的接口的进化”,从指针到面向对象都是这个道理。

面向对象:以客观世界存在的事物为原型来组织设计程序的一种方法论

2,当架构在系统的演进中变为瓶颈(此时 Kiss 已经没有当初的感觉),你就需要安排重构了。有人说架构是在重构中诞生的,显然这是对 Kiss 原则的佐证。

2.“别重复自己” 原则

“别重复自己” 这一说法可能来源于《阿甘正传》,主人公取得了一系列成功,没有一个是重复的。这个原则还有其他名字,比如 “语义一致性原则”、“用同一种方法做同一种事”,讲的都是一回事。

含义:

当我们在两个或多个地方的时候发现一些重复代码的时候,我们需要把他们的共性抽象出来形一个唯一的新方法,把它放在一个地方,改变现有的地方的代码,让它们来调用这个新的方法。

地方可以指一个函数、一个类或一个服务。这条原则是程序员的基本功和基本规范了,被许多架构书反复强调。

建议所有公司在面试时程序员,考是否看过 Forrest Gump。

图1,从不重复自己的阿甘

3.“不要和陌生人说话” 原则

看到这里证明我真的没有标题党,“不要和陌生人说话”原则还有一个官方说法 “迪米特法则”,是我的邻居迪米特告诉我的。

含义:

一个对象实例的一个方法内,应该只有以下变量成员

  • 对象实例本身(就是 This)

  • 方法的入参

  • 在方法内创建的实例变量

  • 对象内的其他成员变量和方法

  • 对象实例具有访问权限的全局变量

而禁止有其他成员,比如和运行环境耦合的东西,如界面元素、或者是第三方的网络接口。

它背后道理,下面这张图就说的很明显了:

图2,和邻居说话,不要和陌生人说话,因为下次你想和他继续说话时,他可能不在了

如果你的程序里耦合和很多“陌生人”,那么这些不可控的因素,会使你的程序脆弱无比,你总不会希望用户散步出服务区时,你的程序界面突然变得很难看。

依赖外部资源的东西,尽可能本地化,比如依赖包。

如果确实需要访问第三方 API,那么怎么办?

“代理者模式!”

好,独秀同学你坐下。关于代理这模式的内容这里就不赘述了,我们应用内部向系统外部调用时,应该都通过代理类。包括微服务中的熔断机制,也是让你不至于等陌生人等的太辛苦。

记住,程序员要学会保护自己,别和陌生人说话!

4.“你懂的” 原则

现在有人说话老爱夹杂一句,“你懂的” ,“You know” 什么的,其实也许对方什么也不懂。架构原则里正好有一个一样的原则,学名叫“ 约定(或者说惯例)优于配置”(Convention over Configuration)

含义:

简单点说,就是将一些公认的配置方式和信息作为内部缺省的规则来使用。例如,Hibernate的映射文件,如果约定字段名和类属性一致的话,基本上就可以不要这个配置文件了。Maven也使用了CoC原则,当你执行mvn-compile命令的时候,不需要指源文件放在什么地方,而编译以后的class文件放置在什么地方也没有指定,这就是约定优于配置原则。

简单来说,架构中不要那么追求过分的灵活性,要尽量优先使用约定俗成或者惯例的东西或框架。同样,在你自己的技术架构中也可以约定一下东西以提高效率。

Rails中很少有配置文件, Rails 的粉丝号称其开发效率是 Java 开发的10倍,估计就是这个原因。

(本文就靠上面这句话带流量了)

图3,你懂的原则

5. 好莱坞原则

据说好莱坞的经济人有一句俗语“Don't call me, I call you!”, 就是别烦我,我主动联系你,你别主动联系我。后来,那些一直没接到电话的就干了程序员,创建了这个原则。

含义:

程序中每个组件都应该是被动的,对于自己被谁调用,出于什么目的调用,底层组件是不应该知道的。它配合依赖倒置原则使用,上层模块要依赖于接口,而不是底层模块,底层模块实现接口,更不能耦合上层逻辑。

就像介绍微服务架构时,我常说的一句话,“沙不知道河,一个微服务也不应该知道应用的存在,同样我们也不知道造物主的安排”。

似乎也可以叫“知道的越多越麻烦原则”

图4, 好莱坞原则

好了,上面选的这些都是名字听来比较有趣的架构原则。当然还有一些非常好,但名字很晦涩的比如什么“李斯柯夫继承”原则,但思想都是很深邃的。如果本文激发了你的兴趣,就自己去谷歌百度一下吧。

欢迎关注作者微信公众号

程序员不要和陌生人说话——漫谈一些有趣的架构原则相关推荐

  1. 程序员,你会说话吗?

    程序员,你会说话吗?当我写这篇博客的时候,肯定有人在说我很傻,提出这样的问题,但是你细心一想,作为程序员的你真的会说话吗?说话,说什么话?如何说话?这是一门艺术,一门有时比编程更重要的艺术,对于有的程 ...

  2. python程序员自我介绍范文_程序员的自我介绍|史上最有趣的版本

    原标题:程序员的自我介绍|史上最有趣的版本 这篇文章的原文来自:A Little Printf Story,作者仿照<小王子>中的情节,通过小printf遇见的不同类型的程序员,最后悟出什 ...

  3. 程序员能力提升:你应该知道的那些编程原则!!

    本文翻译自Programming Principles(http://java-design-patterns.com/principles/). 每个程序员都可以从理解编程原理和模式中受益.这篇概述 ...

  4. Java程序员最应该学习的几个面向对象的设计原则

    2019独角兽企业重金招聘Python工程师标准>>> 面向对象的设计原则是OOP编程的核心,但我已经看到大多数Java程序员追逐设计模式,如Singleton模式,Decorato ...

  5. 高级程序员、研发Leader、技术总监、首席架构师、CTO的区别

    一.高级程序员 如果你是一个刚刚创业的公司,公司没有专职产品经理和项目经理,你就是公司的产品经理,你如果对你现在的开发员能力不满,那么你只需要的是一个高级程序员. 你定义功能.你做计划推进和管理,他可 ...

  6. 高级程序员、研发Leader、技术总监、首席架构师、CTO的职责

    我的新书<Android App开发入门与实战>已于2020年8月由人民邮电出版社出版,欢迎购买.点击进入详情 作者 | 阿朱 来源 | 微信公众号"阿朱说" 经常有创 ...

  7. Github最火项目:程序员必读职场15大定律和7大原则

    公众号菜单栏点击"入群交流",和大家共同进步 大家估计有个越来越深的感受,就是说只做写代码的码农太局限了,现在这个环境,大家都想往上走当领导,除了升职加薪,其实也是实现了阶层的跨越 ...

  8. 2021普通Java程序员如何在行业中脱颖而出?阿里进阶架构师不传之秘终于开源!

    "倒挂"一词大家都不陌生,在程序员领域里更是屡见不鲜,尤其是在公司工作了一段时间后就会发现,后来的每个新人的工资都比自己高,你的工资是15k,新人的工资是30k,奈何人家能力强呢. ...

  9. 《程序员》2016年1月:互联网应用架构面面观

    当我们学习架构的时候,我们在学习什么?(潘晓良) 技术会议上的架构分会场通常颇受欢迎,原因是一般这些公司都比较有名,另外人都有一种找捷径的想法,看看有什么可以借鉴.可是架构这个事情还真的很难借鉴,各个 ...

  10. 【程序员情商up】说话的智慧

    在古巴比伦有一位国王,有一天晚上做了一个奇怪的梦,他梦到自己满口的牙齿都掉光了,无法吃任何东西.醒来后国王的心情十分的糟糕,他担心梦预示着会发生什么不吉祥的事情.于是他命人请来了两个解梦人. 国王问他 ...

最新文章

  1. 【ZZ】编程能力层次模型
  2. JMeter java.net.URISyntaxException:Illegalcharacterinquery解决方案
  3. django使用mysql_设置Django以使用MySQL
  4. 下列描述中 哪些符合java语言的特征_coreJavaBasic试题带答案
  5. java jsonobject date_如何将Json Passed Date Value分配给Java Date Object
  6. 全连接层和卷积层最终应用在网络上的不同之处
  7. fisco bcos 区块链配置文件位置
  8. 虚拟机下载-下载windows镜像
  9. 如何Python写一个安卓APP
  10. HandlerSocket安装
  11. 平衡二叉树详解 通俗易懂
  12. 简单介绍一下用加速度传感器修正角速度传感器(陀螺仪)累计误差的原理
  13. 在 Android 中使用指纹进行身份验证
  14. 现代前端技术解析:前端三层结构与应用
  15. CRMEB多商户系统怎么设置跳转链接
  16. LabVIEW崩溃后所产生的错误日志文件的位置
  17. 女生双修计算机科学与技术,浙江大学计算机科学与技术学院数字媒体技术专业毕业作品展...
  18. 常见微商升级、返利制度设计详解
  19. 全球及中国辉光放电质谱仪(GDMS)市场商业模式与十四五投资战略规划研究报告2022-2028年
  20. linux的pacemaker集群

热门文章

  1. Android 蓝牙HOGP协议(基于ble-gatt蓝牙)连接流程分析--framework-jni-btif-bta-btm-hci -- 全网最详细(二)
  2. C++字符串常量总结(包含表达式必须是可修改的左值问题)
  3. Unity导入Goolgle.Protobuf.dll报错
  4. 防止cookie 欺骗
  5. 个性的留言.html,个性留言经典语录集锦
  6. linux ubuntu 18.04无法输入中文、安装中文拼音输入法
  7. 剑斩楼兰的将军之路:多属性决策模型。
  8. lookup无序查找_查找引用之王——Lookup函数实用技巧解读!
  9. kaldi中fbank特征提取详解(结合源码,深度剖析)
  10. 在CSDN年收入竟达五位数?----大学生技术自媒体成长之路