迪米特法则&开闭原则一次性搞定!

这是我参与11月更文挑战的第17天,活动详情查看:2021最后一次更文挑战

1. 迪米特法则(Least Knowledge Principle LKP)

以商城为例,假如我们的分销商城 AMall 需要获取一个商品信息,一种做法是,我们提供 2 个接口,JDGoodsService 用于提供 JD 商城的商品信息,一个 TMGoodsService 用于提供 TM 商城的商品信息,AMall 分别调用不同的接口获取商品信息。

上面这种设计就违反了 迪米特法则, 注意,是 违反 了迪米特法则。

迪米特法则又叫最小知识原则,标准的定义是:

Only talk to your immediate friends(只与直接的朋友通信)

根据我们上面的这个例子,AMall 需要获取商品信息,不应该直接与 JD、TM 等接口通信,而是 OneMall 提供统一的接口,用于获取商品信息,至于具体是获取 JD 的商品还是 TM 的商品,那应该是 OneMall 该操心的事情,上面的例子中我们的 AMall 跨过了 OneMall 直接与具体的商城接口通信,就是违反了迪米特法则。

迪米特法则是在告诉我们如何处理接口与接口之间的依赖关系。遵守迪米特法则,可以让代码更加容易扩展,比如,将来我们增加一个 TB 的商城接口,对 AMall 来说是不需要做修改的。

2. 开闭原则(Open Close Principle OCP)

还是以我们的 OneMall 商城为例,现在我对接了 JD 商城、TM 商城、TB 商城、如果我们后期要对接其他的商城,我们的 OneMall 商城应该通过扩展(增加)类接口的方式来实现功能,而不是通过修改接口和类来实现。

如果能够通过扩展来实现,说明我们的项目设计就是遵守了 开闭原则

开闭原则的定义:

Software entities like classes,modules and functions should be open for extension but closed for modifications.(一个软件实体如类、模块和函数应该对扩展开放,对修改关闭。)

代码设计如果遵守了开闭原则,可以使代码更容易扩展。

开闭原则是之前五大设计原则的更高层的抽象,或者说,之前的五大设计原则是开闭原则的具体体现。

可能有点绕,可以这么理解,我们在设计代码的时候,终极目标就是希望代码符合或者遵守开闭原则,而具体应该怎么设计才能够符合开闭原则呢,就是尽量遵守其他五大设计原则!

Guess you like

Origin juejin.im/post/7031559135107760164