2018 April 21 —— improvement; java

聊点模式

模式就是给一些已有的编程范式取了个最佳代号,让原来抽象模糊的东西显得更加具象化,可目标化,同时提供了一些设计范例可供参考;

先来看设计模式的一些原则,注意这句话的含义,设计模式是有根的,这就代表通常我们不应该将设计模式当做我们软件设计与实现的目标,这样是舍本逐末,真正的目标应该是设计模式的这些原则 : S.O.L.I.D DRY KISS

  • keep it simple,stupid
  • don’t repeat yourself <简单就是美>

  • Law of Demeter – 迪米特法则 : 最少知识原则, 程序对外部细节应该关注的尽可能少

  • 多组合而少继承(组合优于继承)

组合优于继承,组合更加灵活与可扩展,但注意组合优于继承的上下文: 组合与继承都有其使用场景,要分析对象之间的关系,如果对象之间的确有继承关系,继承的存在就是必要的,但在大多数场景下,很多人在应该使用组合情况而错误的使用了继承;

  • 依赖接口而不是实现

时刻提醒自己,通常我们所说的设计模式只是达到上述优雅设计的一种手段,而如果把符合设计模式当做目的就走偏了,为了符合模式而使用设计模式让实现看起来像某几种模式,设计模式的生搬硬套反而影响了整体的实现,让实现变得复杂而丑陋,本末倒置;

在重构代码时多回顾一下我从哪来,要到哪里去,本质的目的是什么?时刻记住设计模式是一种手段/工具,而不是我要达到的目的;

OOP的本质就是——对数据和与之关联的行为进行编程

依赖倒置

IOC/DIP其实是一种管理思想

胶水层

在软件开发过程中,通常我们讲究分层,而在实际开发过程中,通常自顶向下的分层,或者是自底向上的分层;底层通常是技术基础组件,而顶层则通常是业务逻辑实现,而分层到最后总会产生一个问题,要么每一层都不干净,要么在层次中间加入了一层胶合层

而胶合层的复杂度往往与抽象层直接关联,过多的抽象往往导致胶合层越厚,胶合层对于理解实际的意义是起阻碍作用的,也就是越厚维护越痛苦;

先解决眼前的问题,再考虑长远的通用,不要过度设计,优秀的实践通常是迭代产生,心中永远怀着一颗追求完美的心,但完美通常无法由设计产生,而是由不停的迭代优化去趋近;

进一步可以查阅: UNIX 编程艺术第四章模块性

如何有效锻炼自己的设计能力?

日常生活中去锻炼自己的抽象能力,要明白软件设计的本质是将现实社会的需求抽象为软件领域的建模,从各个方面去对于日常事物进行抽象,从创建(对象的创建) / 结构(类与对象的组合) / 行为(对象间的通信) 等角度去考虑

多阅读分析优秀的源码,思考优秀框架设计的设计考虑;

设计需要练习,多去尝试,多去实验,总结自己的设计过程,失败了分析原因;


Quote:

《A Little Java, A Few Patterns》(发表于 1997 年)

《UNIX 编程艺术》

S.O.L.I.D:面向对象设计的头 5 大原则

一些软件设计的原则

酷 壳- 面向对象

IOC/DIP其实是一种管理思想

上一篇
下一篇
Loading Disqus comments...
Table of Contents