有段业务重构
void function (){
A a=method1(int id);
method2(B b,C c);
method3(D d,C c);
}
就是一个功能模块,原来是一个大方法
从头处理到尾,中间仅仅有几处小不同,类似于
处理一个订单,只有付款接口的参数是不同的
最后处理方式有些增加了额外的处理,
原来都是用 if else 判断订单类型,这样每次都要改代码
所以现在准备分拆成几个小方法,如上,
这样每次只要重新实现一个类,覆盖掉某个方法就可以了
但是现在遇到一个问题,就是传递参数的问题,原来一个
大方法,可以从头用到尾,现在,需要在 method1 用到的 A 、 B , C
然后 method2 中间又要去查询一次,影响效率,否则就要原封不动的放到参数里面
这样感觉很麻烦,不知道有没有合适的方法或者设计模式
能够让实现的轻松点,原来的实现方式是声明一个大 map ,然后全部放到 map 里面
每次就只传一个 map ,感觉不够明确,而且容易取值的时候写错 key ,如果声明为
全局变量,感觉也不好,所以想看看
大家有什么好主意
1
loshine1992 2015-12-18 22:55:03 +08:00
模板方法模式?
|
2
li24361 OP @loshine1992 谢谢
|
3
li24361 OP @loshine1992 现在用的就是模板模式了,不过就是方法间传值太恶心了,没办法就只能每个方法查询一次了
|
4
hepin1989 2015-12-18 23:22:04 +08:00
放入一个 Context 对象中,或者 threadlocal 。看你是用的什么模型了。
|
5
zonghua 2015-12-19 00:25:00 +08:00 via iPhone
request ?
|
7
palmers 2015-12-19 10:06:51 +08:00
如果你的所有订单类型入参一致,可以直接使用代理模式 , 如果表面上看不一样,可以想办法让入参尽可能的一致(比如使用抽象类描述等)然后将这个订单处理抽象成一个接口, 不同的订单类型实现该接口就可以了
|
8
decaywood 2015-12-19 15:48:29 +08:00
参数如果只是只读的话只需要封装在一个对象里面即可,如果需要写,最好就重新查一次,同步的坑可不浅
|