07 软件设计
编程范式
- 学习编程范式可以让你明白编程的本质和各种语言的编程方式
- Wikipedia: Programming paradigm 顺着这个页面看下去,可以看到很多有用的和编程相关的知识
- Six programming paradigms that will change how you think about coding 文章讲了默认支持并发(Concurrent by default)、依赖类型(Dependent types)、连接性语言(Concatenative languages)、声明式编程(Declarative programming)、符号式编程(Symbolic programming)、基于知识的编程(Knowledge-based programming)等六种不太常见的编程范式,并结合了一些小众语言来分别进行讲述
- Programming Paradigms for Dummies: What Every Programmer Should Know 文章里分析了编程语言在历史上的演进,有哪些典型的、值得研究的案例,里面体现了哪些值得学习的范式
- 斯坦福大学公开课:编程范式 比较基础且很详细的课程,适合学习编程语言的初学者
软件设计的相关原则
- Don’t Repeat Yourself (DRY) 当在两个或多个地方发现一些相似代码的时候,我们需要把它们的共性抽象出来形成一个唯一的新方法,并且改变现有地方的代码让它们以一些合适的参数调用这个新的方法
- Keep It Simple, Stupid(KISS) 在界面设计和操作设计上,复杂的东西越来越被众人所鄙视,而简单的东西越来越被人所认可
- Program to an interface, not an implementation 注重接口,而不是实现,依赖接口,而不是实现
- You Ain’t Gonna Need It (YAGNI) 只考虑和设计必须的功能,避免过度设计
- Law of Demeter 最少知识原则
- 面向对象的 S.O.L.I.D 原则
- SRP(Single Responsibility Principle)职责单一原则,一个类,只做一件事,并把这件事做好,其只有一个引起它变化的原因
- OCP(Open/Closed Principle)开闭原则,模块是可扩展的,而不可修改的
- LSP(Liskov substitution principle)里氏代换原则,子类必须能够替换成它们的基类
- ISP(Interface Segregation Principle )接口隔离原则,把功能实现在接口中,而不是类中,使用多个专门的接口比使用单一的总接口要好
- DIP(Dependency Inversion Principle)依赖倒置原则,高层模块不应该依赖于低层模块的实现,而是依赖于高层抽象
- CCP(Common Closure Principle) 共同封闭原则,一个包中所有的类应该对同一种类型的变化关闭
- CRP(Common Reuse Principle)共同重用原则 ,包的所有类被一起重用。如果你重用了其中的一个类,就重用全部
- Hollywood Principle 好莱坞原则,组件都是被动的,所有的组件初始化和调用都由容器负责。即由容器控制程序之间的关系,而非传统实现中,由程序代码直接操控
- High Cohesion & Low/Loose coupling 高内聚, 低耦合,把模块间的耦合降到最低,而努力让一个模块做到精益求精
- CoC(Convention over Configuration) 惯例优于配置原则,将一些公认的配置方式和信息作为内部缺省的规则来使用
- SoC (Separation of Concerns) 关注点分离,在软件开发中,通过各种手段,将问题的各个关注点分开。如果一个问题能分解为独立且较小的问题,就是相对较易解决的
- DbC(Design by Contract) 契约式设计,对软件系统中的元素之间相互合作以及“责任”与“义务”的比喻
- ADP(Acyclic Dependencies Principle) 无 环依赖原则,包(或服务)之间的依赖结构必须是一个直接的无环图形
软件设计的读物
- 《领域驱动设计》围绕着设计和开发实践,结合若干真实的项目案例,向读者阐述如何在真实的软件开发中应用领域驱动设计
- 《UNIX 编程艺术》介绍了 Unix 系统领域中的设计和开发哲学、思想文化体系、原则与经验
- 《Clean Architecture》/《Clean Architecture》介绍了软件架构的元素、方法等
- The Twelve-Factor App 为构建 SaaS 应用提供了方法论
- Avoid Over Engineering 告诉你什么是过度设计
- Instagram Engineering’s 3 rules to a scalable cloud application architecture, Instagram 工程的三个黄金法则
- 使用稳定可靠的技术(迎接新的技术)
- 不要重新发明轮子
- Keep it very simple
- How To Design A Good API and Why it Matters - Joshua Bloch 关于如何设计好一个 API
- 关于 Restful API 的设计
- The Problem With Logging 介绍一些可能以往不知道的打日志需要注意的问题
- Concurrent Programming for Scalable Web Architectures 教你如何架构一个可扩展的高性能的网站