首页 > 其他分享 >1.设计原则

1.设计原则

时间:2023-11-21 22:00:10浏览次数:29  
标签:依赖 原则 实现 修改 抽象 组件 设计

五大设计原则分别为:单一职责原则、开闭原则、里式替换原则、接口隔离原则、依赖反转原则

一、单一职责原则

最初或者说字面解释:每个模块都应该只做一件事。

符合设计层面的描述:任何一个软件模块都应该有且仅有一个被修改的原因。

“被修改的原因”可以用用户或者所有者来指代:任何一个软件模块都应该只对一个用户(User)或系统利益相关者(Stakeholder)负责。

最终描述:任何一个软件模块都应该只对某一类行为者负责。

放在常规的项目中就是Service层提供的服务需要针对一类行为,例如针对审核任务,一个Service负责审核的动作,一个Service负责增删改查数据库操作,当然如果查询也有很多的话,再将查询能力分出一个Service

二、开闭原则

设计良好的计算机软件应该易于扩展,同时抗拒修改。

虽然原则的说明很简单,但实现起来所考量的点就很多了,合理的模块和依赖关系显得尤为重要,这一原则再次论述就是:如果A组件不想被B组件上发生的修改所影响,那么就应该让B组件依赖于A组件。

实现方式:实现方式是通过将系统划分为一系列组件,并且将这些组件间的依赖关系按层次结构进行组织,使得高阶组件不会因低阶组件被修改而受到影响。

核心要点: 依赖方向的控制、 对调用者进行信息隐藏

三、里式替换原则

这里需要的是一种可替换性:如果对于每个类型是S的对象o1都存在一个类型为T的对象o2,能使操作T类型的程序P在用o2替换o1时行为保持不变,我们就可以将S称为T的子类型。

最开始该原则是指导如何使用继承关系的一种方法,然而随着时间的推移,LSP逐渐演变成了一种更广泛的、指导接口与其实现方式的设计原则。

其本质就是面向接口编程

四、接口隔离原则

在一般情况下,任何层次的软件设计如果依赖于不需要的东西,都会是有害的。

从源代码层次来说,这样的依赖关系会导致不必要的重新编译和重新部署,对更高层次的软件架构设计来说,问题也是类似的。

五、依赖反转原则

如果想要设计一个灵活的系统,在源代码层次的依赖关系中就应该多引用抽象类型,而非具体实现。

稳定的抽象层:我们每次修改抽象接口的时候,一定也会去修改对应的具体实现。但反过来,当我们修改具体实现时,却很少需要去修改相应的抽象接口。所以我们可以认为接口比实现更稳定

归结为以下几条具体的编码守则:

  1. 应在代码中多使用抽象接口,尽量避免使用那些多变的具体实现类。同时,对象的创建过程也应该受到严格限制,对此,我们通常会选择用抽象工厂(abstract factory)这个设计模式。
  2. 不要在具体实现类上创建衍生类
  3. 不要覆盖(override)包含具体实现的函数。在这里,控制依赖关系的唯一办法,就是创建一个抽象函数,然后再为该函数提供多种具体实现。
  4. 应避免在代码中写入与任何具体实现相关的名字,或者是其他容易变动的事物的名字。

标签:依赖,原则,实现,修改,抽象,组件,设计
From: https://www.cnblogs.com/wzq-blogs/p/17832833.html

相关文章

  • C语言程序设计P7
    1for循环代码块变种练习练习一for循环可以嵌套练习二练习三2dowhile循环eg:打印1-103循环练习计算n的阶乘计算阶乘和计算1!+2!+...+10!(法1)嵌套循环,先计算n的阶乘,再相加(法2)先计算n的阶乘,再n乘n的阶乘求和......
  • 基于springboot的校园失物招领系统-计算机毕业设计源码+LW文档
    校园失物招领系统介绍在现代大学校园中,失物招领系统是一个至关重要的组成部分,旨在为学生、教职员工和访客提供便捷的失物招领服务。本文将介绍一个基于SpringBoot的校园失物招领系统,该系统结合了现代技术和用户友好的界面,提供了高效、安全和快速的失物招领流程。系统架构该系统采......
  • 基于Springboot教学管理系统-计算机毕业设计源码+LW文档
    摘 要传统办法管理信息首先需要花费的时间比较多,其次数据出错率比较高,而且对错误的数据进行更改也比较困难,最后,检索数据费事费力。因此,在计算机上安装教学管理系统软件来发挥其高效地信息处理的作用,可以规范信息管理流程,让管理工作可以系统化和程序化,同时,教学管理系统的有效运用......
  • 基于vue技术的农业设备租赁系统-计算机毕业设计源码+LW文档
    摘 要使用旧方法对农业设备租赁系统的信息进行系统化管理已经不再让人们信赖了,把现在的网络信息技术运用在农业设备租赁系统的管理上面可以解决许多信息管理上面的难题,比如处理数据时间很长,数据存在错误不能及时纠正等问题。这次开发的农业设备租赁系统对收货地址管理、字典管理......
  • MySQL大表设计
    存储大规模数据集需要仔细设计数据库模式和索引,以便能够高效地支持各种查询操作。在面对数亿条数据,每条数据包含数百个字段的情况下,以下是我能想到的在设计数据库的时候需要注意的内容,不足之处欢迎各位在评论区批评指正:1.数据库设计表结构设计垂直分割:将大的表分割成多个相......
  • 软件设计模式学习每日总结-第九天
    第九天组合模式:组合多个对象形成树形结构,使得叶子和容器的使用具有一致性。透明组合模式:声明了对象的所有的方法。安全组合模式:不声明对象的方法。 ......
  • 领域驱动设计之银行转账:Wow框架实战
    银行账户转账案例银行账户转账案例是一个经典的领域驱动设计(DDD)应用场景。接下来我们通过一个简单的银行账户转账案例,来了解如何使用Wow进行领域驱动设计以及服务开发。银行转账流程准备转账(Prepare):用户发起转账请求,触发Prepare步骤。这个步骤会向源账户发送准备转账的请......
  • 针对苜蓿草青贮打捆包膜一体化机械的设计-文档
    摘要当前,企业的发展朝着智能化和自动化的方向发展,操作简单的机械设备受到众多厂家的青睐,引起了研究人员的普遍关注。本次毕业设计是针对苜蓿草青贮打捆包膜一体化机械的设计,包括捡拾器、输送机构、喂入切割结构和缠网包膜机构。拾取器主要由电机驱动螺旋机构进行旋转,将苜蓿不断......
  • 2023-2024-1 20211211 《信息安全系统设计与实现(上)》第13章
    1网络编程简介TCP/IP协议、UDP和TCP协议、服务器-客户机计算、HTTP和Web页面、动态Web页面的PHP和CGI编程2TCP/IP协议IPv432位地址IPv6128位地址TCP/IP协议顶层是使用TCP/IP的应用程序,用于登录到远程主机的ssh,用于交换电子邮件的mail、用于Web页面的http等应用程序需要......
  • 浅谈微服务架构的设计理念
    微服务架构是一种软件设计和开发的架构风格,将应用程序划分为一组小而自治的服务,每个服务都有自己的数据存储和业务逻辑,并通过轻量级的通信机制相互协作。以下是微服务架构的一些设计理念:1.服务自治性(ServiceAutonomy):核心思想:微服务应该是自治的,即每个服务都独立运行、部署......