java 抽象过程_java,设计模式_对一般订单生成过程的抽象过程的思考,java,设计模式,php,oop,面向对象设计模式 - phpStudy...

对一般订单生成过程的抽象过程的思考

对一般订单生成过程的抽象过程的思考

一般的电子商务网站,都会有生成订单这个业务,最近自己也正好负责的是这块业务,所以自己也好好理了理这块的业务。

其实不管是订单部分的业务代码,还是其它部分的业务代码。一个不小心就会写成流程式的代码。写成流程式的代码,我个人觉得主要有一下几点:

代码里面充满了很多注释,注释按照步骤写下来.1,2,3,4,5,6.

代码没有层次性,具体的层次性可以参照关于业务分层。还有一个就要设计的就是抽象一致性

代码没有模块性,具体的体现就是一件事,会在很多地方穿插进行。举个例子,订单里面会涉及到邮费,计算邮费的值会遍布在整个订单流程。这样的坏处就是,出了问题以后,一下子定位不到问题出现在哪里。

订单的流程,按照普通的过程来说。会有生成一下几步

计算优惠(包括活动,红包等)

计算邮费

生成支付信息

生成订单

......

先来分析下订单的整个流程,发现它其实是一个黑盒。页面传了一批参数过来以后,我们封装了一下,然后丢进这个黑盒,出黑盒里面出来的是最后生成的订单实体。

我们首先对整个过程建立一个最高层的抽象。即:

public interface Builder{

public void do(Context context);

}

这样子,每一部分都在做自己的事情,如果涉及到和其他模块进行通信的话,可以借助这个上下文Context。这样子就可以在很大程度上实现模块化。至于里面更小的抽象,我们还可以根据不同的层次抽象出更多的Builder来让我们的代码可以模块化。

至于怎么讲这些Builder串联起来。一开始,我觉得这个过程可以看做是一个订单实体的构建过程,所以一开始我用的是建造者模式,但是发现把这些东西都放在一个类中,在维护上是在是太费力气,所以后来我就用了责任链模式的变形(类似struts里面的拦截器)。

经过这样子的抽象以后,你会发现。每个类都在做自己的事情,而且不用写大量的注释来注释整个流程。关于流程的扩展的话,因为整个架子在那里,所以如果是扩展流程的话,那么在已有的链上加一个节点就OK了,如果是业务内部的扩展的话,只需要在相应的类里面扩展,不会涉及到其他的类。

这里写到了关于建造在模式和责任链模式,我准备下一个提问中说说关于设计模式的一些事。

希望大家可以指点。

相关阅读:

data-role, data-url如何使用?

Chrome 扩展里面他们给网页进行截图是如何实现的

react-router2.0如果关闭了页面路由就失效了

SQL分组排序、随机问题?

js中取消默认行为的问题

如何让VS安全连接远程的SQLite文件

C语言二维数组名问题

“分享到百度新首页”网址过期的原理是怎样的?

有没有woff转ttf的工具?

如何获取ldap错误返回码

ImagesLoaded、Masonry 都提供一种 pkgd.js 文件下载,请问这是一种专用格式吗?

Ipad的safari浏览器不支持Tab选项卡动画吗,为啥不显示自动切换点击也没效果

js HTMLElement属性 ie8及以下版本不支持问题,求解决方案~~~

php 如何将数组的每一元素作为可变参数函数的实参传入?

无限级分类问题

uc浏览器中overflow:hidden不起作用么?

关于泛型用instanceof的问题

php多语言设置,是把多语言存入数据库好,还是直接保存为一个数组文件好?

R-studio出现Error in plot.new() : figure margins too large

请教一个前端问题,刚打开这个小米5网址http://www.mi.com/mi5/没有滚动条

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值