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、对…

纸张大小

A0到A10的纸张尺寸表 纸的型号高(mm)x宽(mm)毫米高(mm)x宽(mm)英寸4A02378 x 1682 mm93.6 x 66.2 in2A01682 x 1189 mm66.2 x 46.8 inA01189 x 841 mm46.8 x 33.1 inA1841 x 594 mm33.1 x 23.4 inA2594 x 420 mm23.4 x 16.5 inA3420 x 297 mm16.5 x 11.7…

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

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

[CareerCup] 1.1 Unique Characters of a String 字符串中不同的字符

1.1 Implement an algorithm to determine if a string has all unique characters. What if you cannot use additional data structure? 这道题让我们判断一个字符串中是否有重复的字符,要求不用特殊的数据结构,这里应该是指哈希表之类的不让用。像普…

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

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

python flask 通过ajax向后台传递数组参数

https://blog.csdn.net/m0_38061194/article/details/78851152 ajax 像后台传递参数,一般是字典的形式传递,但是如果字典的value的值是一个数组的话,通过request.form 获取得到的结果是 None。这是就需要把数组对象转化为json字符串&#xf…

JS,JQuery杂谈

JS返回页面: JS返回前一个页面,经常看到有人用window.history.go(-1)这种方法 这种放的确可以返回,也仅仅只是返回,返回的页面信息却没有刷新。也有人用windows.history.back(),但是经常返回的时候会丢失页面&#xf…

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…

flask ajax 笔记

html 其中 {{url_for(add)}} 的 add 为 flask 路由函数名 dataType: "json", 加了这句,才能读到 flask 返回的 json var my_tra_info {"key1":"val1","key2":val2};$.ajax({type:post,async:false,url:"{{url_fo…

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

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

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

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

asp.net模态窗口返回值

个人感觉模态窗口在做网站的时候,使用到的比较少,前段时间在做项目时要实现以模态窗口传值和接收返回值, 模态窗口传值实现比较简单,但是做好后发现在Chrome浏览器中接收不到返回值,修改好Chrome浏览器的问题后 大概过…

web前端-css

1.1CSS 链接的四种状态:a:link --普通的、未被访问的链接 a:visited --用户已访问的链接 a:hover --鼠标指针位于链接的上方 a:active --链接被点击的时刻这里我们需要注意的是这四个属性设置要遵循的顺序问题: a:hover 必须位于 a:link 和 a:visited 之…

PyCharm设置字体大小与颜色

https://jingyan.baidu.com/article/fedf0737b31f7435ac8977de.html Editor -> Color & Fonts -> Font

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

问题:给定两个矩形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…

Pycharm(社区版) 创建Flask项目

https://blog.csdn.net/hold_on_/article/details/86651594