程序设计原则

面向接口编程

  • 分离关注点,关注点越多越好,粒度越小越好,要把不同的内容拆分开来
  • 寻找共同点这件事,地基还是在分离关注点上
  • 设计扩展点,迈向开放封闭原则
  • 只要你认为会出现重复,它就是一个值得我们去思考解决的问题
  • 要想提供扩展点,就需要面向接口编程
  • 基于行为进行封装,不要暴露实现细节,最小化接口暴露
  • 公开接口是最宝贵的资源,千万不能随意添加
  • 识别对象的不同角色,拆分小接口,胖接口不稳定的原因是它承担了太多的职责
  • 接口将变的部分和不变的部分隔离开来
  • 识别出变与不变,是一种很重要的能力
  • 建立起恰当的抽象,面向接口编程
  • 子类型必须能够替换父类型
  • 用父类的角度去思考,设计行为一致的子类
  • 组合优于继承,如果一个方案既能用组合实现,也能用继承实现,那就选择用组合实现
  • 新需求应该用新代码实现
  • 我们第一步做的事情还是分解,把一个一个的步骤分开,然后找出步骤之间相似的地方,由此构建出一个新的模型

单一职责

  • 应用单一职责衡量模块,粒度越小越好

里氏替换原则

  • 运行时需要类型识别,可能一级破坏了LSP
  • 如果A是B的子类,需要满足A是一个B
  • 满足LSP,首先这个对象体系要有一个统一的接口,而不能各行其是, 其次,子类要满足IS-A的关系

依赖关系

  • 任何一个项目,了解不同模块的依赖关系是一件很重要的事
  • 可以去找一些工具生成项目的依赖关系图,去衡量你的项目在依赖关系上表现得怎么样
  • 循环依赖,要把设计做对,把该有的接口提取出来
  • 高层模块不依赖于低层模块,可以通过引入一个抽象或者模型,将二者解耦开来。高层模块依赖于这个模型,而低层模块实现这个模型
  • 依赖构建出来的抽象,而不是具体类
  • 任何类都不应继承具体类
  • 任何方法都不应该改写父类中已经实现的方法
  • 聚合是多个实体或值对象的组合,这些对象是同生共死的关系。比如一个订单里有很多个订单项,如果这个订单作废了,这些订单项也就没用了。我们可以把订单和订单项看成一个单元,订单和订单项就是一个聚合

其它

  • 设计时想一下,这个函数/模块/系统要怎么测
  • 了解设计,先模型,再接口,最后是实现
  • 在纷繁复杂的接口中,找主线,看风格
  • 先找到一条功能主线,对项目建立起结构性的了解。有了主线之后,再沿着主线把相关接口梳理出来
  • 熟悉现有的接口风格,保持统一是非常重要的
  • 理解实现,带着自己的问题,了解软件的结构和关键的技术
  • 我们不仅要知道一个设计的结果,最好还要推断出设计的动因
  • 消息队列实现消息存储的方式通常是把它写入到磁盘中。而kafka利用了磁盘顺序读写的特性。对于普通的机械硬盘,如果是随机写,需要按照机械硬盘的方式去寻址,然后磁头做机械运动,写入速度就会慢很多。但顺序写的话,会大幅度减少磁头的运动,效率自然就得到了大幅度的提高
  • 每年至少学习一门能够提供新编程模型的程序设计语言
  • 一切语法都是语法糖
  • 优秀的程序员会懂得将不同层次的代码分离开来,将意图和实现分离开来,而实现可以替换
  • 现在主流的编程范式主要有三种:结构化编程、面向对象编程、函数式编程
  • 结构化编程不能有效地隔离变化,需要与其他编程范式配合使用
  • 学习不同的编程范式,将其中优秀的元素运用在日常工作中
  • 函数式编程在设计上对我们帮助最大的两个特性:组合性和不变性
  • 尽可能编写不变类和纯函数
  • 方法的返回值可能为空,就返回一个Optional。这样就给了方法使用者一个提示,这个对象可能为空,小心处理
  • 衡量应用的设计水平的标准:没有自动化、开发员修改代码实现、开发员修改配置实现、业务员修改配置实现
  • 任何一个系统,我们最好要知道没有自动化的时候,这个问题是如何解决的
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值