mysql耦合_内聚与耦合

简单理解一下内聚和耦合。

什么是模块

模块就是从逻辑上将系统分解为更细微的部分,分而治之。

复杂问题因为复杂性的问题,比较难解决,但是可以将复杂问题拆解为若干简单问题,逐个击破地解决这些简单问题,最后实现解决复杂问题的效果。

模块的粒度划分可大可小,可以是函数,类或功能块等等。

耦合主要描述的是模块与模块之间的关系,内聚则主要描述的是单个模块的内部构成。

什么是耦合

如果模块之间存在依赖,则可能会导致一个模块的改动影响了另外的模块的问题,甚至是相互影响。

两个模块之间的关系越紧密,耦合就越强,模块的独立性就会越差。

比如一个模块A直接操作了模块B中数据,则视为强耦合;若A只是通过数据与模块B交互,则视为弱耦合。

独立的模块便于扩展、维护和单元测试,如果模块之间重重依赖的话,就会极大降低开发效率。

什么是内聚

一个模块应当尽可能独立完成某个功能,模块内部的元素关联性越强,则内聚越高,模块单一性就越强。

如果有各种场景需要被引入到当前模块,代码的质量将变得非常脆弱,这种情况建议拆分为多个模块。

低内聚的模块代码,不管是维护、扩展还是重构都相当麻烦。因为要兼顾内部元素的关联性,如果不理清楚的话可能会难以下手。

接口设计原则

好的接口应当满足设计模式六大原则,很多的设计模式或框架都是基于高内聚低耦合这个出发点的。

1.单一职责原则:一个类只负责一个功能领域中的相应职责。

2.开闭原则:一个软件实体应当对扩展开放,对修改关闭。

3.里氏代换原则:所有引用基类(父类)的地方必须能透明地使用其子类的对象。

4.依赖倒转原则:抽象不应该依赖于细节,细节应当依赖于抽象。换言之,要针对接口编程,而不是针对实现编程。

5.接口隔离原则:使用多个专门的接口,而不使用单一的总接口。即客户端不应该依赖那些它不需要的接口。

6.迪米特法则: 一个软件实体应当尽可能少地与其他实体发生相互作用。例如外观模式,对外暴露的是统一接口。

外观模式

外观模式是为系统中的多个子系统提供一致的对外调用,对客户端隐藏子系统细节,降低其与子系统的耦合。

814ced77788069066c622d2929c98a79.png

桥接模式

JDBC中的把面向厂商的接口(Driver)和面向使用者的API(DriverManager)做了拆分隔离。

//开发者只需要关注JDBC API, 无需关注不同数据库Driver接口实现

Class.forName("com.mysql.jdbc.Driver");

Connection conn= DriverManager.getConnection(url, username, password);

这样,开发者只需要指定数据库的驱动类,调用的方法即API都是相同的,不会因为数据库的不同而有所区别。

e0008f848dcb15d098650857567a0dda.png

适配器模式

如果引入了第三方库(Hibernate,Log4j),不应该直接在代码中继承或者使用其实体类。

应该要抽出上层统一接口,然后增加实现类,最后对外暴露接口。

//代码与log4j强耦合, 不推荐

org.apache.log4j.Logger.getRootLogger().info("yanggb");//底层可以随意更换log框架

FRLoggerFactory.getLogger().info("yanggb");

这样,如果要更换log框架,只需要修改FRLoggerFactory中对log框架的引用就可以了,不需要在每个业务代码中修改。

c61e01d92c1cea648ef085e16bc565ca.png

"我曾对你心动过,但赶路要紧,我忘了说。"

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

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

相关文章

Google CEO Sundar Pichai :“谷歌最大的威胁就是自身的成功”

作者:Dude 概要:10月9日,低调的皮柴哥接受了英国卫报的访问,在访谈期间,他分享了谷歌在人工智能上发展,也表达了对谷歌近年来发展的隐忧。 10月9日,低调的皮柴哥接受了英国卫报的访问&#xff0…

国防科技大学教授:殷建平——计算机科学理论的过去、现在与未来

来源:图灵人工智能殷建平 教授,博士生导师,国防科学技术大学计算机系主任。研究方向有:模式识别与人工智能、网络算法与信息安全。享受国务院政府特殊津贴。2015年被评为“万人计划”国家级教学名师。2009年被评为“全国优秀教师”…

《自然》杂志:关于人类未来的工作,有三个最紧迫的问题

来源:36氪 概要:机器学习会淘汰工人吗?零工经济(Gig Economy)会增加对工人的剥削吗?技能的差距能够弥补吗? 机器学习会淘汰工人吗?零工经济(Gig Economy)会增…

有史以来影响世界的颠覆性技术 | 未来的高附加值颠覆性技术产业

来源:DeepTech深科技(ID:mit-tr) 概要:没有工具,人类就是一个脆弱的物种,没有任何人种可以手无寸铁面对自然。技术伴随人类成长,从野蛮走向文明。人类历史就是一部技术史。 人类发展…

一文详解脑科学研究与产业发展方向

来源:神经科技、脑计划 概要:大脑是人体最复杂的器官,破译大脑运转密码、揭开生命之谜,是令无数科学家殚精竭虑的艰难课题。脑科学已成为21世纪最前沿的研究领域,尤其与信息科学进行交叉研究已成为脑科学发展的一个重要…

ef生成mysql字段注释_EFcore+MySql 数据迁移的时候,怎么给表结构加注释?

前言:CodeFirst运用的场景比较少,不代表CodeFirst不好,也不能和DbFirst去作比较,本来就是两个东西。吐槽:MySql.Data.EntityFrameworkCore 作为Oracle官方维护的组件,居然对EF很多API不支持或者无效&#x…

10秒一部电影,全球首个5G数据连接完成

作者:李赓 概要:2017年10月17日、也就是上周二,高通在香港高调宣布——其面向移动终端的5G调制解调器芯片组,骁龙X50 5G调制解调器芯片组完成了全球首个5G连接,同时实现了千兆级速率并在28GHz毫米波频段上的数据连接。…

idea 不打开文件提示错误_解决IDEA误删out目录下的文件导致404无法访问的问题

前言有时候IDEA下写Web项目时可能会遇到如下问题:误删out目录下的文件导致开启服务器后无法访问页面的问题新增加一个页面或添加一张图片,在项目编译运行后,未能自动更新到out\artifacts\目录下,从而导致页面无法访问,或者图片未能…

华为生态链的全方位解读

来源: 本翼资本CapitalWings 概要:华为作为目前国内ICT行业的融合性创新龙头企业,其多年经营探索的经营模式和宝贵经验使得其成为传统制造业转型的标杆,而对于新兴企业,能够越过坎坷的探索之路,直接嫁接华…

洪小文:以科学的方式赤裸裸地剖析人工智能

来源: 微软研究院AI头条 概要:要想在未来实现人工智能这项“新”技术的最大化利用,必须清楚认识到人工智能到底是什么,过去我们做了什么,今天能做什么,未来又能有什么新的发展可能。 近两年来,人…

人工智能如何驱动实体经济?六大领域展望

来源:腾讯研究院 概要:科技进步正在成为推进经济发展的重要推动力,对中国经济发展的贡献率已经上升到56.2%。面对正在兴起的人工智能浪潮,如何占据行业发展制高点,如何促进与实体经济深度融合,形成新增长点…

《浪潮之巅》作者吴军最新演讲:超级人工智能

来源:亿欧 概要:10月22日,AMINO硅谷中国“新”大会在南京经济技术开发区举行。《浪潮之巅》作者、AMINO资本合伙人吴军发表了以《超级人工智能》为主题的演讲。 人工智能起源 我知道很多人都想听我讲人工智能是怎么回事儿?最近有…

mysql慢sql增加读写分离_MySQL主从同步+读写分离

MySQL主从同步读写分离实验拓扑:三台mysql数据库:192.168.80.101 主服务器 mysql192.168.80.102 从1服务器 mysql192.168.80.103 从2服务器 mysql192.168.80.104 调度器Amoeba服务器 jdk、amoeba192.168.80.105 mysql客户端 mysql第一部分:三…

Google公布OpenFermion:量子计算机的开源软件包

来源:转载自公众号「雷克世界」微信号:ROBO_AI 作者:Ryan Babbush、Jarrod McClean 编译:嗯~阿童木呀、多啦A亮 概要:OpenFermion是一个用于模拟电子(费米子)相互作用系统的库,它能够…

java 类集合_java集合类详解

一、集合类与数组的区别1.集合的长度可变,数组的长度固定;2.集合用来存放对象引用,数组用来存放基本类型的数据;二、集合类的关系1.Collection接口存储一组不唯一、无序的对象。2.List接口存储一组不唯一、有序(插入顺序)的对象。…

英特尔宣布推出“Nervana”神经网络处理器

原作者:Ryan Whitwam 译者:彭婷 概要:Nervana NNP就是基于这种计算设计的。这也是所谓的专用集成电路(ASIC),所以它无法应用于一般的计算任务。 科幻小说家和现代科技大型公司一致认为AI可以开辟出一条康庄…

java爬取button_学习使用Java的webmagic框架爬取网页内容

(一)使用前的配置:2,(1)添加依赖:us.codecraftwebmagic-core0.7.3us.codecraftwebmagic-extension0.7.3us.codecraftwebmagic-selenium0.7.3(2)从GitHub官网下载webmagic的压缩包(https://codeload.github.com/code4craft/webmagic/zip/maste…

异构智能吴韧:物联网是“伪命题”?智联网才是未来

概要:“咨询机构预测,在未来人工智能的市场上12%的比例的资金将用在人工智能芯片上。”吴韧表示,异构智能瞄准的就是人工智能本地芯片市场。 Novumind异构智能(以下简称异构智能)在火热的人工智能新闻里出现的次数屈指…

java栈编程题_Java实现栈和队列面试题

面试的时候,栈和队列经常会成对出现来考察。本文包含栈和队列的如下考试内容:(1)栈的创建(2)队列的创建(3)两个栈实现一个队列(4)两个队列实现一个栈(5)设计含最小函数min()的栈,要求min、push、pop、的时间复杂度都是O(1)(6)判断栈的push和p…

联合国《2017年信息经济报告》

来源:联合国 概要:数字经济已经深入到了人们生活的衣食住行等所有方面,其发展速度和方式超出人们的想象。数字经济将把人类带往何方?这还是一个难解的谜题。 数字经济已经深入到了人们生活的衣食住行等所有方面,其发展…