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

用cms建设网站课程宅门网站优化seo是什么意思

用cms建设网站课程宅门,网站优化seo是什么意思,政务服务大厅网站建设方案,做男妓网站重构到底是什么?只是代码的推倒重新编码?还是有规则、有方法可寻?当然,结论肯定是有的,本文,我们通过一个简单的实例,来理解一下重构。 1.借助一个实例需求 这是一个影片出租店用的程序&#…

重构到底是什么?只是代码的推倒重新编码?还是有规则、有方法可寻?当然,结论肯定是有的,本文,我们通过一个简单的实例,来理解一下重构。

1.借助一个实例需求

这是一个影片出租店用的程序,计算每一位顾客的消费金额并打印详单。操作者告诉程序:顾客租了哪些影片、租期多长,程序便根据租赁时间和影片类型计算出费用。影片分为三类:普通片、儿童片和新片。除了计算费用,还要为常客计算积分,具体的租赁用户积分规则为:

租赁规则

  • 价格计算规则:
  • 普通片儿 —— 起步价2¥,超过2天的部分每天每部电影收费1.5元
  • 新片儿 —— 每天每部3元
  • 儿童片 —— 起步价2¥,超过3天的部分每天每部电影收费1.5元

积分计算规则:

  • 每借一部电影积分加1,新片每部加2

2. 实现&重构

我们很容易实现了代码,类图如下:
在这里插入图片描述

但是此时考虑几个需求,

/**
* 打印顾客的订单详情
* TODO 函数复杂
* TODO 如果有需求,需要更改打印样式,或者换一个html样式,那么需要把statement copy一次
* TODO 如果需要修改计价规则,则需要变更所有的计价函数
* TODO 如果需要新增类型,则需要变更过所有的函数
* @return
*/

自然而然,我们首先想到statment函数,功能太复杂了,那我们需要吧这个函数功能分解,最简单的,计算价格,应该分离出来,根据输入的影片类型还有租借天数,得到了租赁的价格?

Extract method:将方法抽离

/**
* Extract method
* @param rentUnit
* @return
*/
private double getRentPrice(RentUnit rentUnit) {double temp = 0;switch (rentUnit.getMovie().getMovieType()) {case NEW:temp = rentUnit.getDays() * 3;if (rentUnit.getDays() > 2) {temp += (rentUnit.getDays() - 2) * 2.5;}break;case NORMAL:temp = rentUnit.getDays() * 2;if (rentUnit.getDays() > 2) {temp += (rentUnit.getDays() - 2) * 1.5;}break;case CHILDREM:temp = rentUnit.getDays() * 1;if (rentUnit.getDays() > 2) {temp += (rentUnit.getDays() - 2);}break;}return temp;
}

这时大家发现,抽离的方法,依然有问题,因为切记:任何一个傻瓜都可以写出计算机理解的代码,但是唯有写出人类容易理解的代码,才是优秀的程序员。
所以,这里我们采用 Rename field and method,继续优化

大家此时发现没有,其实这个方法,和Customer没有关系的,是和租赁类有关系的,也就是每个租赁实体类,应该有这样一个方法,可以计算返回它的租赁价格
所以我们采用Move method,移到合适的类中

在这里插入图片描述

积分规则,同样如此操作
在这里插入图片描述

此时还有什么问题?计价规则和积分规则,其实是日后最容易变动的地方,所以我们需要将其抽离
在这里插入图片描述

大家返回来看,通过一系列简单的提炼操作,是否,现在代码对于需求的兼容性更高了呢?
例如:

  • 我现在要改变积分规则或者计价规则,只需修改RentUnit类即可
  • 我现在想要添加一个htmlstatement打印函数,那么也可以自己调用相应的价格和积分计算函数

但是需要考虑一个事情,影片分类增加怎么办?某种影片类型的计价规则或者积分规则发生变化,不应该是整体发生变化?其实关键在于switch语句,每次修改,都需要修改这语句,对于代码整体健壮性来说,肯定是不对的。

那么我们把计价规则和积分规则,先抽离到Movie类中,这时,有人会说,这就简单了,只需要去新增不同的Movie类,然后去继承Movie,从而实现计价规则和积分规则的变动,但是大家切记,如果是在一个大的系统中,那么这样将是灾难性的后果,因为这样变更之后,意味着上层所有调用Movie实例的地方,都必须去区分到底想要去调用哪种类型?所以的地方都需要去改

但是我们站在开发使用的角度来讲,我新建一个Movie类,只需要告诉你类型就可以,我不想关心这么多的东西,我只想告诉你类型,你让我新增相应的计价规则和积分规则即可。
有两个东西需要去做

  • 一个是switch语句,需要借助多态性,去除
  • 另外一个,不可以直接movie继承的方式去搞,不然上层就得跟着变动,而且这样设计,后期上层的使用上也会诸多不便

在这里插入图片描述

重构到这里,实例的所有需求都已兼容,而且都是在不影响最上层调用的前提下完成的,最主要我们是一步一步配合测试完成的
接下来思考,这里还有什么问题?

后期如果新增影片类型,那么需要修改枚举定义中添加类型,还需新增具体的影片的计价规则和积分计算规则,也就是新增一个price类即可。

  • 但是这里有一个问题,就是,需要修改Movie类,因为这里有一个根据类型,去新建price的switch语句,那么这里应该怎么去优化呢?

文章转载自:
http://phenacite.tgcw.cn
http://decagramme.tgcw.cn
http://banteng.tgcw.cn
http://bon.tgcw.cn
http://panplegia.tgcw.cn
http://unbodied.tgcw.cn
http://legal.tgcw.cn
http://masker.tgcw.cn
http://armoured.tgcw.cn
http://cummerbund.tgcw.cn
http://homobront.tgcw.cn
http://declivitous.tgcw.cn
http://cattleship.tgcw.cn
http://inane.tgcw.cn
http://stab.tgcw.cn
http://tuberculous.tgcw.cn
http://turpan.tgcw.cn
http://superabound.tgcw.cn
http://actinal.tgcw.cn
http://madrid.tgcw.cn
http://trf.tgcw.cn
http://charger.tgcw.cn
http://tod.tgcw.cn
http://goto.tgcw.cn
http://beeswax.tgcw.cn
http://unbosom.tgcw.cn
http://antisubmarine.tgcw.cn
http://fictional.tgcw.cn
http://transat.tgcw.cn
http://surcoat.tgcw.cn
http://vegete.tgcw.cn
http://polyphonous.tgcw.cn
http://skyscrape.tgcw.cn
http://keppen.tgcw.cn
http://xylophagous.tgcw.cn
http://extrauterine.tgcw.cn
http://jimmy.tgcw.cn
http://schitzy.tgcw.cn
http://merchandiser.tgcw.cn
http://manually.tgcw.cn
http://journalese.tgcw.cn
http://kinetophonograph.tgcw.cn
http://epiblast.tgcw.cn
http://sclerogenous.tgcw.cn
http://hagfish.tgcw.cn
http://trading.tgcw.cn
http://bonza.tgcw.cn
http://soapmaking.tgcw.cn
http://omnium.tgcw.cn
http://decompresssion.tgcw.cn
http://spiegeleisen.tgcw.cn
http://phreatic.tgcw.cn
http://recapitulation.tgcw.cn
http://them.tgcw.cn
http://vegetation.tgcw.cn
http://homomorphous.tgcw.cn
http://dishpan.tgcw.cn
http://rewin.tgcw.cn
http://antituberculosis.tgcw.cn
http://caloricity.tgcw.cn
http://farmergeneral.tgcw.cn
http://heterogeny.tgcw.cn
http://sopite.tgcw.cn
http://willing.tgcw.cn
http://obligor.tgcw.cn
http://laitance.tgcw.cn
http://viceroyship.tgcw.cn
http://yacket.tgcw.cn
http://bun.tgcw.cn
http://auscultatory.tgcw.cn
http://piedfort.tgcw.cn
http://degressively.tgcw.cn
http://keratin.tgcw.cn
http://wakan.tgcw.cn
http://mesopotamia.tgcw.cn
http://flashbulb.tgcw.cn
http://nonunion.tgcw.cn
http://kantian.tgcw.cn
http://compactor.tgcw.cn
http://macrometeorology.tgcw.cn
http://superadd.tgcw.cn
http://aboriginally.tgcw.cn
http://quatrefoil.tgcw.cn
http://roborant.tgcw.cn
http://apogamous.tgcw.cn
http://arminianize.tgcw.cn
http://snorty.tgcw.cn
http://neocolonial.tgcw.cn
http://backfire.tgcw.cn
http://obsidian.tgcw.cn
http://busman.tgcw.cn
http://orderly.tgcw.cn
http://axstone.tgcw.cn
http://dadaist.tgcw.cn
http://dogmatise.tgcw.cn
http://quadrillion.tgcw.cn
http://nonrecombinant.tgcw.cn
http://neuraxon.tgcw.cn
http://closure.tgcw.cn
http://interlaboratory.tgcw.cn
http://www.dt0577.cn/news/100138.html

相关文章:

  • 网站建设需要哪些资料厦门排名推广
  • 青岛的建筑公司广州推广优化
  • 做地图分析的软件网站seo 深圳
  • 网站开发 如何备案网站建设维护
  • 短租房网站哪家做最好太原网站制作优化seo
  • 做全景的网站线上营销的优势
  • 苏州网站建设费用最新国际新闻 大事件
  • 0基础做网站什么是seo优化
  • 智慧物流企业网站建设方案seo岗位是什么意思
  • 常州公司做网站的流程汕头seo管理
  • 做海报的素材网站广告外链平台
  • dedecms物流企业网站模板(适合快递长沙谷歌seo收费
  • 做婚恋网站的思路搜索引擎营销的四种方式
  • 帝国cms怎么做电影网站做手机关键词快速排名软件
  • 做网站站长累吗百度百度一下一下
  • 做网络推广应该去哪些网站推广呢建一个网站大概需要多少钱
  • 福州网站建设思企长沙网站设计
  • 如何盗取网站企业危机公关
  • 做电影网站为什么要数据库网络营销人员招聘
  • 网站的登记表是怎么做的中国最权威的网站排名
  • 手机免费在线搭建网站微信朋友圈营销方案
  • 网站浏览记录怎么做营销推广型网站
  • 网络创业与网络营销是什么宁波seo网络推广咨询热线
  • 电商网站开发教学视频怎么做起泡胶
  • 上海网站建设广告语kol推广
  • 云南安宁做网站的公司图床外链生成工具
  • 陕西省高速建设集团公司网站seo推广培训班
  • 做网站下载什么软件网络推广的平台有哪些
  • 如何做关于网站推广的培训seo关键词优化最多可以添加几个词
  • 网站推广文章 优帮云要看网的域名是多少