魔法数- -
Hani又发飚了——我最爱看Hani的文章,不过这篇显得太客气了点,也许因为是TSS的featured article,不得不把语气和缓一下吧。
生命周期回调方法的设计确实很搞笑。简单说,一个EJB并不需要——像2.1那样——实现特定的接口。为了创建一个session bean,下面两种方式都是合法的:
public class ShoppingCartBean implements SessionBean {
或者
@Session public class ShoppingCartBean {
但是,用@Session标注的session bean却也可以实现生命周期方法(譬如ejbRemove()、ejbActive()等),容器也会照常调用这些方法,就好象它实现了SessionBean接口一样。可惜,既然不继承接口,编译器就不能保证方法名正确,于是这些方法名就成了魔法数。其实NUnit提供了一个很好的参考。NUnit的测试用例不必——像JUnit那样——继承TestCase类,所以set up方法和tear down方法也不是靠方法名来区分、而是靠元数据标注(也就是.NET Attribute)来区分的。在EJB这里,既然已经没有接口约束,像这样实现生命周期回调方法如何:
@Session public class ShoppingCartBean {
...
@EjbRemove public void myRemoveMethod() {