24. 设计原则

总的来说是高内聚低耦合,内聚是把变化点进行封装,耦合还是要有的,只是要尽量少,不同内聚点的联系方式有两种,一种就是继承,一种就是组合。组合又分为基于接口组合还是基于类组合,基于接口就可以灵活的改到聚合点的实现,只要符合接口的规范就可以。

(一)抽象

现实世界和程序对象之间的映射关系。不是像(相似)建模,是要对解决的问题进行抽象建模,要解决的问题是可能发生改变的,所以组织对象的时候要考虑把可能的变化封装起来。这件事很重要,怎么把现实问题一步步映射成对象,再到代码的经验,就是领域驱动建模了。

(二)封装变化

业务在不断变化,,想要程序可以持续使用,就要在需求变化时容易改变程序。可以把变化的东西抽成一个方法,或者抽成一个类,取决于粒度。这样同一个变化点以后改起来只要改一个地方就好。如果变的动静可能会很大,比如可能会把整个类都替换掉,可以把这个类提供的服务抽象成个接口,就可以满足开闭原则,对扩展开放,在修改关闭,设计模式就是封装变化或者是满足开闭原则的经验。

 

封装,接口。

编码:抽象成方法,如果是重要的领域概念,抽成类。再灵活些抽成接口。模式提供了一些封装变化的模板,如策略,模板方法。

开发管理:同样的东西不要重复实现,引用一处,变更容易。(如UI部门选择树,以及从业务模块接口)

架构:模块间重复的逻辑,可以抽出基础平台。

实现:第一步是对变化封装。更进一步抽象化是关键,更灵活的扩展。

 

封装变化有两种类的形式,一种是继承一种是组合。

 

 

 

 

(三)(is a)里氏代换原则

任何基类可以出现的地方,子类也一定可以出现。。

(四)合成优于继承

是抽象,合成比继承在大部分情况下更适用,和里氏相辅,是实施规范。

原代码程序设计

 

知识点:

1组合和继承

2在同一层次减少包装类(包装类有为想跨层时才有用)

3.更多可用的接口

4.太深的层次

5.应用的灵活性(比如应用可以根据自己的需求要不要向上层暴露底层是分库分表的,有些业务可能需要知晓分库分表-按分表做一些线程划分,有些应用不需要-查询一些数据不关心这些数据都在哪些表里)

新的设计

 

 

 

(五)基于接口(依赖倒转原则)

要依赖于抽象不要依赖于实现。开放封闭原则是目标,依赖倒转原则是手段。

A依赖调用B,A调用a1接口,B实现a1接口。从而B依赖于a1。

(六)单一职责

类,方法,变量都只做一件事,要不名字都没办法起。

不用看类的实现,只看类名,就知道类做什么;不用看方法实现,只看方法名,就知道方法做什么。(注:最多加上注释,所以引出注释的程度就是要和名字一起让别人不用看实现就可以放心的使用它)引出了单一职责。

(七)接口隔离原则

不要提供大的总接口。是单一职责的子集。

每个类,或者方法都应该尽可能少的对外提供服务,这样产生对象改变的原因就会单一,是封装变化的一个更好的保证,变化封的更严实。

 

软件要能灵活适应变化,组件化,组件可替换,基于接口。

(八)最小可见性(迪米特法则)

一个软件实体应该尽量少的和其它实体发生相互作用。通向开闭原则的道路。调用方调用够用就可以,被调用方暴露尽量少的服务。

转载于:https://www.cnblogs.com/guanpanpan/p/3414407.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/400003.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

js中 json详解

var aa {name:"zoumm",age:23};var bb JSON.stringify(aa);console.log(bb); //打印出{"name":"zoumm","age":23} json的语法可以表示以下三种类型的值。 1、简单值:可以在json中表示字符串、数值、布尔和null。 2、对…

试用合肥工业大学学位论文 LaTeX 模板(HFUT_Thesis)

目录编辑器模板下载TeXstudio 4.2.3 Windows 10 20H2 编辑器 编辑器的下载和安装参考Latex下载 —— 倔强菜鸟(转载) 模板下载 见合肥工业大学硕士毕业论文的LaTex模板? 感谢大佬~ 大佬的项目地址:https://github.com/HFUTTUG/HFUT_Thesis/releases 下载下来后…

怎么查询局域网内全部电脑IP和mac地址..

在局域网内查询在线主机的IP一般比较简单,但局域网内全部电脑的IP怎么才能够查到呢?查询到IP后我还要知道对方的一些详细信息(如MAC地址、电脑名称等)该怎么查询呢??? 工具/原料 Windows 网络 方…

C语言一阶低通、高通滤波器滤除截止频率外的杂波

目录理论推导产生测试信号sin_cal.csin_cal.h生成波形一阶滤波器FirstOrderFilter.cFirstOrderFilter.h测试低通滤波器高通滤波器IAP15W4K58S4 Keil uVision V5.29.0.0 PK51 Prof.Developers Kit Version:9.60.0.0 串口示波器:Vofa 1.3.10 理论推导 低通滤波器 …

OAF_开发系列19_实现OAF对话框提示dialogPage(案例)

20150716 Created By BaoXinjian 一、摘要 Oracle dialogPage是OAF提示框的一种用法,具体应用例如在删除数据时,提示用户进行确认是否可以删除 二、实现方法 在CO中添加如下方法 public void processFormRequest(OAPageContext pageContext,OAWebBean we…

设计模式(一)---简单工厂模式

1,简介:简单工厂模式,又称为静态工厂模式,是通过专门定义一个类来负责创建其他类的实例,被创建的实例通常都具有共同的父类。 2,简单工厂模式的结构 2.1:简单工厂的通用结构 2.2:示意…

给LaTex输出的论文PDF加上电子签名

目录问题准备签名插入签名TeXstudio 4.2.3 Windows 10 20H2 参考资料:研究生毕业论文电子签名怎么弄?—— kk肥妹 问题 完成论文之后,需要加上签名,但LaTex输出的结果是PDF格式的 准备签名 准备自己的签名,比如直接…

判断两个矩形相交以及求出相交的区域

问题:给定两个矩形A和B,矩形A的左上角坐标为(Xa1,Ya1),右下角坐标为(Xa2,Ya2),矩形B的左上角坐标为(Xb1,Yb1),右下角 坐标为(Xb2,Yb2&…

【MSP430G2553】图形化开发笔记(1) 配置环境

目录CCS的配置下载和安装激活安装Grace并导入CCS安装MSP430Ware并导入CCS安装XDCtools并导入CCS建立工程Welcome介绍开始打开官方点灯Demo平台: Code Composer Studio 6.2.0 Grace 2.2.0 MSP430G2553 LaunchPad™ Development Kit (MSP-EXP430G2ET) CCS的配置 支…

【现代程序设计】【homework-07】

C11 中值得关注的几大变化 1.Lambda 表达式 Lambda表达式来源于函数式编程,说白就了就是在使用的地方定义函数,有的语言叫“闭包”,如果 lambda 函数没有传回值(例如 void ),其回返类型可被完全忽略。 定义在与 lambda 函数相同作…

Jfinal源码解析系列一

2019独角兽企业重金招聘Python工程师标准>>> 1 Jfinal的初始化入口 <filter><filter-name>jfinal</filter-name><filter-class>com.jfinal.core.JFinalFilter</filter-class><init-param><param-name>configClass</pa…

【MSP430G2553】图形化开发笔记(2) 系统时钟和低功耗模式

目录系统时钟概述BCS模块单元的基本构造时钟-概览介绍Basic User 模式Power User 模式1. 数控振荡器 DCO2. 出厂预校正频率3. 低频振荡器 VLO4. 内部匹配电容5. 延时启动6. 自动选择 MCLK 源7. 时钟输出8. 振荡器失效中断9. 中断事件处理函数10. 退出中断后的节能选项Registers…

alias命令

alias命令&#xff08;取别名之前先运行一下将要使用的别名&#xff0c;以免冲突&#xff09; alias语法&#xff1a;alias 自定义的命令真正的命令 1.使用which查看一个命令的完整命令&#xff0c;也可以查看绝对路径 2.‘alias’查看系统中所有别名&#xff1a; 3.应用 再使用…

奇怪的 加号

转载于:https://www.cnblogs.com/chuyu/p/3421237.html

Java反射机制:表单数据自动封装到JavaBean中【IT】

2019独角兽企业重金招聘Python工程师标准>>> (2010-07-09 19:50:18) 转载▼ 标签&#xff1a; it 分类&#xff1a; IT路人丁 利用Java的反射机制&#xff0c;模拟一个简单的Struts控制器ActionServlet时&#xff0c;为了将请求的表单数据自动封装到JavaBean中&…

eclipse启动tomcat不能正常访问问题

问题&#xff1a; 1、eclipse中配置好tomcat服务器后&#xff0c;启动tomcat查看控制台信息显示启动成功&#xff0c; 但访问tomcat首页报404异常 2、而从tomcat/bin目录中启动后&#xff0c;就能够正常访问首页&#xff0c;由此分析应该是eclipse配置错误 解决方案&#xff1a…

AD域

将网络中的计算机逻辑上组织到一起&#xff0c;将器视为一个整体进行集中管理&#xff0c;这种区别于工作组的逻辑环境叫做Windows域。windows管理模式有两种&#xff1a;工作组和与环境。活动目录的相关概念(1)域和域控制器(2)名称空间(3)对象和属性(4)容器(5)组策略活动目录的…

Python学习笔记19(算法)

1.二分查找 只能用二分查找查找有序列表 def bin_search(data,val): #data为被查找的列表&#xff0c;val是要查找的值low 0high len(data) - 1while low < high:mid (lowhigh)//2if data[mid] val:return mid #找到了&#xff0c;返回val所在的索引elif dat…

C#通过接口与线程通信(捕获线程状态)介绍

摘要&#xff1a;本文介绍C#通过接口与线程通信(捕获线程状态)&#xff0c;并提供简单的示例代码供参考。 提示&#xff1a;本文所提到的线程状态变化&#xff0c;并不是指线程启动、暂停、停止&#xff0c;而是说线程内部状态的迁移。随着软件技术不断发展&#xff0c;用户需求…

php 类文件加载 Autoloader

做习惯了编译语言&#xff0c;转到php 使用 php的面向对象开发时候遇见一个挺别扭的问题。在Php中引入对象 后 在调用过程中还需要将对象所在的php文件 require 到当前php文件 目前代码结构 index.php <?phpuse model\BookModel;include_once __DIR__./autoloader.php; Aut…