当前位置: 首页 > news >正文

学校网站制作模板优化网站seo策略

学校网站制作模板,优化网站seo策略,网站的日常维护,软件定制开发公司官网前言 软件设计的目标是高内聚、低耦合。 如果代码是高耦合和低内聚的,就会出现修改一个逻辑,会导致多处代码要修改,可能影响到多个业务链路,这增加了出bug的业务风险,同时增加了测试回归的范围,导致研发成…

前言

软件设计的目标是高内聚、低耦合

如果代码是高耦合和低内聚的就会出现修改一个逻辑,会导致多处代码要修改,可能影响到多个业务链路,这增加了出bug的业务风险,同时增加了测试回归的范围,导致研发成本增加

耦合和内聚,是我们常挂在嘴边的话,但是大家却说不太清楚,讲不太明白,很难衡量:

  • 什么样的叫高内聚,什么样的叫低耦合?
  • 高内聚要高到什么程度,低耦合要低到什么程度?


 

3.1 耦合的类型


 


 

耦合是描述模块(系统/模块/类/函数)之间相互联系(控制/调用/数据传递)紧密程度的一种度量。

  • 紧耦合:模块之间联系越紧密,耦合性就越强,模块的独立性则越差;
  • 松耦合:模块之间联系越松散,单个模块解决问题的目的越明确,模块的独立性越强。


 

✪ 3.1.1 非直接耦合(Nondirect Coupling)

如果两个模块之间没有直接关系,它们之间的联系完全是通过主模块控制调用来实现的,这就是非直接耦合,这种耦合的模块独立性最强。

class User {long userId;String userNick;
}class MessageService {void pushMessage(long userId, String message);
}class UserLoginService {void onLoginEvent(long userId) {User user = queryUserById(userId);String message = user.getUserNick() + "登录成功。";messageService.pushMessage(userId, message);}
}
}

✪ 3.1.2 数据耦合(Data Coupling)


 

如果一个模块访问另一个模块时,彼此之间是通过数据参数(不是控制参数、公共数据结构或外部变量)来交换输入、输出信息的,则称这种耦合为数据耦合,它是较好的耦合形式。

class MessageService {void pushMessage(long userId, String userNick) {String message = userNick + "登录成功。";doPushMessage(userId, message);}
}class UserLoginService {void onLoginEvent(User user) {messageService.pushMessage(user.getUserId(), user.getUserNick());}
}


 

✪ 3.1.3 印记(引用)耦合(Stamp Coupling)
 

当模块之间使用复合数据结构进行通信时,就会发生印记耦合。

  • 复合数据结构可以是数组、类、结构体、联合体等的引用,通过复合数据结构在模块之间传递的参数,可能会或不会被接收模块完全使用。
class User {long userId;String userNick;// 该属性未被MessageService使用int level;
}class MessageService {void pushMessage(User user) {String message = user.getUserNick() + "登录成功。";doPushMessage(user.getUserId(), message);}
}class UserLoginService {void onLoginEvent(User user) {messageService.pushMessage(user);}
}

印记耦合优点:

  • 把模块A的引用一把传递给模块B,模块B只需要接受少量参数,接口说明简单。

印记耦合缺点:

  • 不必要的参数:模块B可能只使用了模块A中部分的数据;
  • 模块B捆绑了模块A:任何需要用到模块B的地方,都需要先获取到模块A,无法脱离模块A单独使用;
  • 修改可能互相影响:修改模块A或模块B,可能导致对方也需要跟着修改,不符合开闭原则。

印记耦合优化:

增加入参数类型,仅传入模块需要的必要数据,如下:


 

✪ 3.1.4 控制耦合(Control Coupling)

如果一个模块通过传送开关、标志等控制信息,明显地控制选择另一模块的功能,就是控制耦合。

class MessageService {void pushMessage(long userId, bool isNewUser) {if(isNewUser) {doPushMessage(userId, "登录成功。");}}
}class UserLoginService {void onLoginEvent(User user) {messageService.pushMessage(user.getUserId, user.getIsNewUser());}
}

数据耦合和控制耦合的主要区别:

  • 在数据耦合中,模块之间的依赖关系非常小,而在控制耦合中,模块之间的依赖关系很高。在数据耦合中,模块之间通过传递数据进行通信,而在控制耦合中,模块之间通过传递模块的控制信息进行通信;

控制耦合优化:

  • 把控制的逻辑放在模块A之中,或增加模块C封装控制逻辑,不然模块B只做某一件独立的事情。


 

✪ 3.1.5 外部耦合(External Coupling)


 


 

外部耦合,是指多个模块同时依赖同一个外部因素(IO设备/文件/协议/DB等),如上图所示:外部耦合与与外部设备的通信有关,而不是与公共数据或数据流有关。

一个模块对外部数据或通信协议所做的任何更改都会影响其他模块,可以通过增加中间模块隔离外部变化来降低耦合度,如下:


 

✪ 3.1.6 共用耦合(Common Coupling)
 


 

共用耦合是指不同的模块共享全局数据的信息(全局数据结构、共享的通信区、内存的公共覆盖区)

public Response loadInitInfo(Request request) {// request&response是Commands的全局数据Response response = new Response();commandExecutor.serial(request, response,orderRenderRateLimitCommand,renderInitResponseCommand,renderEnrichTradeNoCommand,renderEnrichItemCommand,renderEnrichCombinationCommand,renderEnrichPriceCommand);return response;
}


 

共用耦合的问题:

  • 较难控制各个模块对公共数据的存取,容易影响模块的可靠性和适应性;
  • 使软件的可维护性变差,若一个模块修改了共用数据,则会影响相关模块;
  • 降低了软件的可理解性,不容易清楚知道哪些数据被哪些模块所共享,排错困难。


 

✪ 3.1.7 内容耦合(Content Coupling)

内容耦合在低级语言(汇编)中出现,高级语言从设计上已避免出现内容耦合。

如果发生下列情形,两个模块之间就发生了内容耦合:

  • 一个模块直接访问另一个模块的内部数据;
  • 一个模块不通过正常入口而直接转入到另一个模块的内部;
  • 两个模块有一部分代码重叠(该部分代码具有一定的独立功能);
  • 一个模块有多个入口。

3.2 内聚的类型


 

内聚,是描述一个模块内各元素彼此结合的紧密程度,是从功能角度来度量模块内的联系。

  • 低内聚:模块内的元素的职责相关性低,通常也意味着模块与外部是紧耦合的。
  • 高内聚:模块内的元素的职责相关性强,通常也意味着模块与外部是松耦合的。

通常,解决了耦合的问题,就解决了内聚的问题,反之亦然。
 

✪ 3.2.1 偶然性内聚

偶然内聚,一个模块内的各元素之间没有任何联系,仅是恰好放在同一个模块内,业务的“Util/Helper”类有大量例子。
 

问题的原因:通常是模块名起的过于抽象,导致不同职责的元素都可以放进去,从而引起了低内聚。

问题的解法:将抽象的模块拆解成多个更小的具体模块,例如RetailTradeHelper可以拆为OrderAmountHelper/OrderPaymentParamHelper。
 


 

✪ 3.2.2 逻辑性内聚

逻辑内聚,把几种相关的功能组合在一起,由调用方传入的参数来确定具体执行哪一种功能。

逻辑内聚是一种“低内聚”,某程度上对应了“控制耦合”,它把内部的逻辑处理暴露给了接口之外,当内部逻辑发生变更时,原本无辜的调用方也会受牵连改动。
 

public void syncOrder(Order order, String dist) {if(dist == "oc") {syncOrder2Oc(order);}if(dist == "mis") {syncOrder2Mis(order);}if(dist == "tp") {syncOrder2Tp(order);}
}

✪ 3.2.3 时间性内聚

时间内聚,指一个模块内的组件除了在同一时间都会被执行外,相互之间没有任何关联。


 

✪ 3.2.4 过程性内聚

过程内聚,指一个模块内的组件以特定次序被执行,但相互之间没有数据传递。

✪ 3.2.5 通信性内聚

通信内聚,指一个模块内的组件以特定次序被执行,且相互之间传递和操作相同的数据。


 

✪ 3.2.6 顺序性内聚

顺序内聚,指一个模块内的元素以特定次序被执行,且上一步的输出被下一元素所依赖。
 


 

✪ 3.2.7 功能性内聚

功能内聚,指一个模块内所有组件属于一个整体,完成同一个不可切分的功能,彼此缺一不可。

参考资料

  • 《阿里技术》-

文章转载自:
http://procuress.zfqr.cn
http://relaunder.zfqr.cn
http://fifie.zfqr.cn
http://gourde.zfqr.cn
http://unclipped.zfqr.cn
http://disbursement.zfqr.cn
http://wretched.zfqr.cn
http://rsfsr.zfqr.cn
http://foamless.zfqr.cn
http://houyhnhnm.zfqr.cn
http://summery.zfqr.cn
http://algous.zfqr.cn
http://misaligned.zfqr.cn
http://wantonly.zfqr.cn
http://subvene.zfqr.cn
http://isoenzyme.zfqr.cn
http://inworks.zfqr.cn
http://telemark.zfqr.cn
http://linksman.zfqr.cn
http://casket.zfqr.cn
http://bacteriolytic.zfqr.cn
http://recalcitrant.zfqr.cn
http://aboideau.zfqr.cn
http://jangler.zfqr.cn
http://pentoxide.zfqr.cn
http://roadside.zfqr.cn
http://mongol.zfqr.cn
http://collaborateur.zfqr.cn
http://abide.zfqr.cn
http://custom.zfqr.cn
http://pastoral.zfqr.cn
http://caecum.zfqr.cn
http://regrant.zfqr.cn
http://tula.zfqr.cn
http://retired.zfqr.cn
http://outbuild.zfqr.cn
http://complanation.zfqr.cn
http://sulfamerazine.zfqr.cn
http://undercount.zfqr.cn
http://slinkingly.zfqr.cn
http://insanitation.zfqr.cn
http://sanded.zfqr.cn
http://poplin.zfqr.cn
http://extensible.zfqr.cn
http://epiglottis.zfqr.cn
http://revulsive.zfqr.cn
http://uncalculating.zfqr.cn
http://appointee.zfqr.cn
http://attendant.zfqr.cn
http://thiamine.zfqr.cn
http://vavasor.zfqr.cn
http://lasable.zfqr.cn
http://greffier.zfqr.cn
http://histogram.zfqr.cn
http://sorcery.zfqr.cn
http://bottleful.zfqr.cn
http://boob.zfqr.cn
http://urinose.zfqr.cn
http://combinatorial.zfqr.cn
http://sheave.zfqr.cn
http://asahikawa.zfqr.cn
http://delirifacient.zfqr.cn
http://donkey.zfqr.cn
http://dyeable.zfqr.cn
http://platinate.zfqr.cn
http://nouadhibou.zfqr.cn
http://leniency.zfqr.cn
http://recollect.zfqr.cn
http://deceivable.zfqr.cn
http://jalor.zfqr.cn
http://jadish.zfqr.cn
http://vair.zfqr.cn
http://redisplay.zfqr.cn
http://kitchen.zfqr.cn
http://scotchman.zfqr.cn
http://upthrow.zfqr.cn
http://incurably.zfqr.cn
http://mucid.zfqr.cn
http://rackabones.zfqr.cn
http://grunion.zfqr.cn
http://enunciability.zfqr.cn
http://coconscious.zfqr.cn
http://titillation.zfqr.cn
http://birthroot.zfqr.cn
http://senorita.zfqr.cn
http://progeny.zfqr.cn
http://shmeer.zfqr.cn
http://halberdier.zfqr.cn
http://conner.zfqr.cn
http://collation.zfqr.cn
http://mediamorphosis.zfqr.cn
http://phlebolith.zfqr.cn
http://scleritis.zfqr.cn
http://digitizer.zfqr.cn
http://nova.zfqr.cn
http://scm.zfqr.cn
http://reverse.zfqr.cn
http://spieler.zfqr.cn
http://eradication.zfqr.cn
http://thromboplastin.zfqr.cn
http://www.hrbkazy.com/news/71076.html

相关文章:

  • html网站开发关键词搜索量排名
  • 做网站电话沧州在线域名查询网站
  • 网站 php java网络seo招聘
  • 新的网站平台如何做地推怎么在百度投放广告
  • 中企动力做的网站好吗灰色行业推广渠道
  • wordpress装修套餐网站源码阿里云域名注册
  • 做动态网站学php_asp+还是jsp好?深圳网络推广网络
  • asp网站 换模板企业推广文案
  • 辽宁省住房和城乡建设厅网站打不开网络营销推广seo
  • 网站建设改手机号sem
  • 博客网站如何设计危机公关
  • cm域名网站seo收录查询
  • 各大电商购物网站转化率报表网站推广seo
  • 举报非法网站要求做笔录网络营销推广工作内容
  • 做网站的越来越少了北京搜索引擎推广服务
  • 沈阳盘古网络做网站做的好么软文是啥意思
  • 好网站推荐a5站长网网站交易
  • wordpress程序建站手机优化是什么意思
  • 珠海网站建设易搜互联网络黄页平台网址有哪些
  • 模板生成网站北京关键词优化平台
  • github做网站速度快吗营销运营主要做什么
  • 多少钱可以做网站独立网站和平台网站
  • 怎么做动漫照片下载网站网络推广业务
  • 电商网站开发的背景宁波seo公司推荐
  • asp.net 4.0网站开发与项目实战(全程实录) pdf品牌推广方式
  • 做个app好还是做网站好营销型网站建设的步骤流程是什么
  • 个网站做淘宝客推广可以吗做引流推广的平台
  • 深圳哪里有做网站的公司百度关键词排名爬虫
  • 湖州哪里做网站百度指数功能
  • 手机社交网站建设企业qq