type
status
date
slug
summary
tags
category
icon
password
创建时间
Mar 4, 2025 07:29 AM
- 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,迪米特法则 (Law of Demeter),又称“最少知识原则”(Principle of Least Knowledge)。克雷格·拉尔曼(Craig Larman)把 Law of Demeter 又称作“不要和陌生人说话”。可以理解为一个对象应当对其他对象有尽可能少的了解,只与那些直接相关或通过方法传递的对象进行交互。具体来说,一个方法只能访问以下几种对象的方法:
- 当前对象自身;
- 直接关联的对象;
- 方法内部创建或实例化的新对象;
- 方法的参数。
- 面向对象的 S.O.L.I.D 原则
- SRP(Single Responsibility Principle)——职责单一原则。一个类,只做一件事,并把这件事做好,其只有一个引起它变化的原因。
- OCP(Open/Closed Principle)—— 开闭原则。对扩展是开放的,对修改是关闭的。
- LSP(Liskov substitution principle)—— 里氏代换原则。“Subtypes must be substitutable for their base types”,也就是子类必须能够替换成它们的基类。即子类应该可以替换任何基类能够出现的地方,并且经过替换以后,代码还能正常工作。另外,不应该在代码中出现 if/else 之类对子类类型进行判断的条件。——这个解释比较好理解。
- ISP(Interface Segregation Principle )—— 接口隔离原则。把功能实现在接口中,而不是类中。
- DIP(Dependency Inversion Principle)—— 依赖倒置原则。高层模块不应该依赖于低层模块的实现,而是依赖于高层抽象。
- CCP(Common Closure Principle) —— 共同封闭原则,一个包中所有的类应该对同一种类型的变化关闭。一起修改的类,应该组合在一起(同一个包里)。如果必须修改应用程序里的代码,那么我们希望所有的修改都发生在一个包里(修改关闭),而不是遍布在很多包里。
- CRP(Common Reuse Principle)—— 共同重用原则 ,包的所有类被一起重用。如果你重用了其中的一个类,就重用全部。换个说法是,没有被一起重用的类不应该组合在一起。CRP 原则帮助我们决定哪些类应该被放到同一个包里。依赖一个包就是依赖这个包所包含的一切。 CCP 让包尽可能大(CCP 原则加入功能相关的类),CRP 则让包尽可能小(CRP 原则剔除不使用的类)。它们的出发点不一样,但不相互冲突。
- Hollywood Principle(“don’t call us, we’ll call you.”) ——好莱坞原则。好莱坞原则是 IoC(Inversion of Control) 或 DI(Dependency Injection)的基础原则。
- High Cohesion & Low/Loose coupling ——高内聚,低耦合。内聚,指一个模块内各个元素彼此结合的紧密程度;耦合指一个软件结构内不同模块之间互连程度的度量。
- CoC(Convention over Configuration)—— 惯例优于配置原则 ,简单点说,就是将一些公认的配置方式和信息作为内部缺省的规则来使用。(个人感觉与 SpringBoot 中的“约定大于配置”的说法类似)
- SoC (Separation of Concerns) —— 关注点分离。在软件开发中,通过各种手段,将问题的各个关注点分开。一句话就是“大事化小,小事化了”。
- DbC(Design by Contract)—— 契约式设计 ,DbC 的核心思想是对软件系统中的元素之间相互合作以及“责任”与“义务”的比喻。
- ADP(Acyclic Dependencies Principle)—— 无环依赖原则 ,包(或服务)之间的依赖结构必须是一个直接的无环图形。也就是,在依赖结构中不允许出现环(循环依赖)。 如何解决?第一种方法是创建新的包,如果 A、B、C 形成环路依赖,那么把这些共同类抽出来放在一个新的包 D 里。这样就把 C 依赖 A 变成了 C 依赖 D 以及 A 依赖 D,从而打破了循环依赖关系。第二种方法是使用 DIP(依赖倒置原则)和 ISP(接口分隔原则)设计原则。