我一直以为,世间万事万物,都存在着某种规律性的东西,只不过,有的已经被发现,有的还在人们的探索过程中,等待被发现,软件设计亦然。其实,生活中的很多东西,是可以相通的(比如心和心)。

  不是吗?那本很有名的书《建筑的永恒之道》,正是归纳出了长久以来,在人们漫长的经历中摸索出来的有关建筑的一些规律性的东西。然而,它却不仅止于建筑,它还可以延伸至其他诸多领域。我们可以发现,很多精彩的软件设计模式,也是源于此书的思想,这也正是此书的思想光辉光彩照人的原因所在。现在,它的闻名似乎不在建筑业,而在软件业了,正所谓“失之桑榆,取之东隅”。

  好了,言归正题。软件设计的六大原则是什么呢?这也是无数软件设计“先烈”前扑后继(呵呵,说“先烈”似乎悲壮了点:-)),历经磨难而总结出来的“葵花宝典”。慢着,说“葵花宝典”似乎不太适合,改用“内功心法”吧。那么,软件设计的六大内功心法是什么呢?

  内功心法一:开闭原则

  不知为啥,一提到这个心法,便想到一扇门,可以让什么进去,而不让什么进去。当然,这绝不是“华人与狗不得入内”的那扇门(强大的中国已经不是过去的中国了,我为中国人而骄傲)。这扇门是,对扩展开放,对修改关闭。这句话的意思是,你不要动我的奶酪,你不要动我已有的东西,你可以添加新的东西给我,或者替换我的东西。由此联想到Spring中,“依赖注入”的一种实现方式:通过配置接口的实现类而注入,如果业务逻辑发生了变化,只需要提供新的实现加以替换就可以了,你不需要动她原有的东西,以免伤及无辜。

  内功心法二:里氏代换原则

  这个原则就是:在任何基类出现的地方,子类都可以出现。面向对象程序设计的一大特性是:多态。正是多态这个特性造就了很多优秀的设计模式。一般而言,基类总是更一般化的东西,比较少涉及细节以及具体实现。如果遵循此原则,我们就能更好地利用多态的特性,使用一个基类的引用(这个引用可以指向子类),大胆地调用方法,而不必过度地关心其实现细节。歪解:在任何爸爸出现的地方,儿子都可以出现。爸爸能做的事,儿子也能做,而且会做得更好、更细致、更有针对性。有时候爸爸只是告诉儿子去做什么,而怎么做是儿子自己的事情。(爸爸就是爸爸,主要职责是发号施令,呵呵)

  内功心法三:依赖倒转原则

  此原则为:要尽量依赖抽象,不依赖实现。我想熟悉Spring的同仁们应该对此原则有着更深的体会。此心法与心法二相辅相成,有异曲同工之妙。感悟:似乎上层的领导更多的依赖抽象,而底层的员工,更多的依赖实现。正是因为日常我们更多地关心实现细节,而被纷繁的细节变化所累。依此心法修炼,你就能提高层次,从实现的变更导致的烦恼和痛苦中解脱出来。

  内功心法四:合成/聚合复用原则

  很多初学武功的人,在只是学到一点皮毛之时,往往自以为已经得到武功的精髓,处处表现或找人比试。而初学面向对象程序设计的许多人,最初了解且能留下比较深印象的恐怕就是“继承”这个概念了,仿佛继承便是面向对象的精髓了。于是乎,编程时狂用继承,生成一系列像“麻辣串”似的类体系。而前人的实践经验却证明:要尽量多用合成或聚合,少用继承。这样,才能更好的应对变化,使开发出来的系统更易于维护。

 内功心法五:迪米特原则

  这个原则的主要含义为,一个实体要尽可能少与其它实体发生作用或联系。换句话说,与你无关的东西,你知道得越少越好,不要和陌生人说话。事实上,它和最少知识原则殊途同归。  

  内功心法六:接口隔离原则

  意思是说,要多创建些功能定义相对独立的小接口,避免庞大的总接口。每一个接口好比一种角色;每个角色都应该有明确和有限的职责,不该做的事不做,该做的就一定要做好。

  以上所谓的内功心法,非经长期实践修为,而不能洞明其妙也。

软件设计六大内功心法相关推荐

  1. 初识设计模式、软件设计的六大原则

    总结:本篇文字分为两个部分.第一部分:设计模式基本常识:第二部分:软件设计中的六大原则,并详细分析了单一职责原则.(本篇文章的时间轴参考:为知笔记支撑文件夹\Java设计模式(时间序列图).vsdx) ...

  2. 【设计模式】软件设计遵循——六大原则

    软件设计遵循--六大原则 1)开闭原则 定义:一个软件实体如类.模块和函数应该对扩展开放,对修改关闭 原则:用抽象构建框架,用实现扩展细节 优点:提高软件系统的可复用性和可维护性 2)里氏替换原则 定 ...

  3. 软件设计原则及设计模式

    一. 软件六大设计原则(SOLID) Single Responsibility Principle:单一职责原则 Open Closed Principle:开闭原则 Liskov Substitu ...

  4. 常见软件设计原则总结

    ​1 Dont' repeate yourself(DRY) DRY是一个最简单的法则,也是最容易被理解的,但有可能是最难被应用的(这需要我们在泛型设计上做相当大的努力,这不是一件容易的事).它意味着 ...

  5. 首届“发现杯”软件设计大奖赛启动

    2012年3月28日,达内"发现杯"中国大学生软件设计大奖赛媒体见面会在达内IT培训集团总部正式拉开帷幕.高盛公司总经理Terence Ting.IDGVC资本合伙人李建光.集富亚 ...

  6. android 蓝牙连接rtk,基于Android手机的RTK手簿软件设计与实现

    摘要: RTK手簿作为RTK测量生产的载体,对迅速发展的RTK技术具有深远的意义.目前国内外出现的RTK手簿软件主要是基于Windows CE系统和Android系统的专有设备设计开发的,中海达的Hi ...

  7. “中国软件杯”大学生软件设计大赛百度赛项东部赛区正式启动

    当前,生成式AI热潮推动,人工智能正驶入发展快车道,复合型AI人才需求攀升,产教融合持续深化.3月25日,在泉城济南,百度飞桨协同山东大学.济南大学.青岛理工大学,共同举办飞桨院长高峰论坛暨" ...

  8. 软件设计原则SOLID+组合聚合+迪米特原则(附代码讲解)

    SOLID是五大设计原则的首字母简写,最早出现于出自Robert Martin(罗伯特. 马丁)的<架构整洁之道>第三章设计原则.他们分别是 single Responsibility P ...

  9. 软件开发六大发展趋势,真正“软件人”都在关注,值得一看

    随着摩尔定律的终结,未来5至10年将迎来计算机硬件与软件架构的黄金时代,如何成为一个顺应时代发展的真正"软件人" ,跳出"基础代码".告别996,这是当下众多码 ...

最新文章

  1. oracle for 记录数,可视化工具dbForge Documenter for Oracle全新上线!让您轻松记录Oracle数据库...
  2. [bbk5307]第76集 第9章 -数据库性能维护 03
  3. [react] Mern和Yeoman脚手架有什么区别?
  4. 字符串比较函数实现,超简单的面试题,回过头来发现原来我的c多么的薄弱
  5. adblock去除烦人的广告
  6. Android的CheckBox(多选框)
  7. 2020款iPhone SE最快下周发布:价格3000以内
  8. testNg 关闭浏览器异常解决办法
  9. python中装饰器的作用_Python中装饰器的用法
  10. mysql 书名_深入理解MySQL
  11. 最流行的 .NET 反编译工具合集
  12. 万能采集网站php源码,PHP采集系统UZCMS万能最新版
  13. BitOffer携手高盛推出保本保息量化基金,无风险年化收益20%
  14. 基于SSH的房屋租赁系统的设计与实现
  15. 【BUG】unresolvable R_ARM_THM_CALL relocation against symbol `strlen'
  16. 【Unity3d】U3d灯光
  17. 【论文阅读】Stroke Controllable Fast Style Transfer with Adaptive Receptive Fields
  18. Microsoft Web Farm Framework (WFF) 2.0 入门系列之一:WFF 介绍
  19. iTutorGroup学员获2018全国青少年创意编程大赛一等奖
  20. 静态、动态、伪静态的URL结构到底哪种更利于SEO

热门文章

  1. 使用websocket-bench进行socket.io性能测试
  2. UniverSeg:通用医学图像分割模型来了!
  3. 侯捷C++八部曲笔记(六、C++程序的生前死后)
  4. 最大熵模型学习优化案例
  5. cornerRadius (_:antialiased:) (SwiftUI 中文文档手册)
  6. mysql实验总结,数据库实验总结
  7. 信息资源管理之信息化
  8. 【耀杨的前世今生】耀杨七年之约已到,带着小键隐退江湖【蒸滴很c】
  9. 电池mAh代表什么?
  10. 程序员如何提高抗压能力