解惑

解己之惑,解人之惑

增加一个方法要修改多少个地方?

被调到新的项目组,理论上算个Team Leader,没有真正的转正,老大最开始跟我说这边的事情我可以做主,但是美国那边有个架构师开始搭了个架子,意思是在这个架子的基础上做,试了下,发现很繁琐,为了增加一个方法,得修改好多个类。这个阶段其实是个过渡阶段,以后我们会使用Web Service,所以我们哟定义Web Service的接口,然后因为是过渡阶段,所以提供了EJB2的过渡方案和原来的系统整合,所以还得改Remote接口,Local接口可以直接从Service接口extends一下就行了,然后得修改Service的实现类,加上原先的架子里面,设计的是Service里面的每个public方法对应一个Operation类,这些类设计成Command模式,方便以后可以更好的进行负载的Dispatch,就这样,给Service增加一个接口,要完全实现得至少修改3个类,增加一个类,而且前两天也提过这个项目使用的Annotation的一个好处,但是这样一来,我要实现那个接口,也得在Finder里面增加方法。最终,我得修改4个类,增加一个类来增加一个Service接口。天啊,这个是我最讨厌的。

下周打算修改这个架子,取消EJB2的临时方案,使用Dynamic Proxy实现Service,同时可以引人Transaction(这个方案原来也用了,但是架构师以Transaction的问题否决了,那个时候还没有想到怎么解决Transaction的问题,前天突然想起来我的EJB单元测试框架就是用的自定义Transaction的),同时也抛弃Finder的那个方案,因为其实我的BaseOperation已经提供了进行Hibernate的查询的方便的基础功能。最重要的是Finder中定义的Query如果有问题的话修改后不能Hot Deploy,如果在Operation的方法体里面的修改就可以Hot Deploy。这样修改后,增加一个接口只需要修改Service然后增加一个Operation类实现就行了,只要改两个地方。

(Visited 118 times, 1 visits today)

2 Comments

  1. 没看懂
    EJB单元测试框架是哪种,Mock EJB?
    还有那个自定义的transaction是啥样子的
    你的operation就是那个InvocationHandler吗

  2. 上一家公司的EJB单元测试框架是基于Mock EJB,现在我们用的是embeded jboss,但是前几天找到的那个simple JNDI更轻量级一些,但是需要框架做比较多的事情,自动发布需要的组建。
    自定义Transaction就是控制Transaction,主要就是替换自己的Transaction Manager,这个项目里面是从JNDI里面拿到Transaction Manager,然后检查Transaction的状态,如果没有在Transaction里面就自己开启一个Transaction。
    Operation不是InvocationHandler,就是Interface里面的方法的实现类,InvocationHandler是完成Interface的方法到Operation的映射的,Transaction也是在里面处理的。

发表评论

邮箱地址不会被公开。 必填项已用*标注

© 2024 解惑

本主题由Anders Noren提供向上 ↑