论坛首页 Java企业应用论坛

关于设计一个容器过程中碰到的问题

浏览 10386 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2004-09-02  
经过再三考虑,决定用如下的策略:
只要是经过容器构造出来的组建实例,一定是CGLib Enhance过的,组件之间互相调用,传递的也一定是诸如demo.UserManager$$EnhancerByCGLIB$$ce637350@189635d这样的instance,如果有迫不得已情况,可以从Enhanced对象获得未保护的对象(即demo.UserManager@1234567)。

这样的副作用是:所有东东都是CGLib D.P.,就是不知道性能会有多大的影响:(

Potian大 虾呢???你在那里。。。。。
0 请登录后投票
   发表时间:2004-09-02  
acdc 写道
ajoo 写道
如果需要保存,你就传入自动保存的user,否则就传递进去不需要保存的。

你不能决定传递进去的实例是哪一个吗?

针对不同的业务情况,我完全可以确定需要哪种类型的user,我可以通过定义一个新的注解,很方便的让AOP框架自动完成。这也是我目前使用的办法。

那不就完了?只要你能够控制传递进去的user类型,不管你用什么方法,你提出的问题不就是没有意义的了?你要问什么?
0 请登录后投票
   发表时间:2004-09-03  
说说我的理解:
总是存在一个“知道”的问题。

对于一个传递进来的对象,我究竟可以知道多少?

按照ajoo最为强调的面向接口的编程思路,传递进来的一定是一个接口。
你对于这个接口的使用,永远只能是:
xxx.setName()之类,
而不应该是:
u.getEntity().setName();

因为如果这两个对象无论是否经过AOP的增强,都一定会有setName(),但是不见得会有getEntity()。

而且作为调用来说,你也只需要管调用这个setName();不需要去管这个setName()还会不会去做别的事情。

只需要知道接口,别的就不用管了。
0 请登录后投票
   发表时间:2004-09-03  
ajoo 写道

那不就完了?只要你能够控制传递进去的user类型,不管你用什么方法,你提出的问题不就是没有意义的了?你要问什么?


庄表伟 写道
说说我的理解:
总是存在一个“知道”的问题。

对于一个传递进来的对象,我究竟可以知道多少?

按照ajoo最为强调的面向接口的编程思路,传递进来的一定是一个接口。
你对于这个接口的使用,永远只能是:
xxx.setName()之类,
而不应该是:
u.getEntity().setName();


的确,在使用传递进来的User参数的时候,按照面向接口的原则,只应该知道该接口放出来了那些方法,但是接口只定义了输入参数和输出,并没有描述行为。
比如
/**
 * Set user's name and save automatically
 * @param String username to set
 */
  public void setName(String username);;

/**
 * Set user's name, remeber, you must invoke UserManager#saveUser(User); to save user's modified data manually
 * @param String username to set
 */
  public void setName(String username);;



上面的接口是一样的,但是行为不一样,而恰恰是行为不同,影响了调用者的行为。
所以程序员在写上面这个UserManager.addMember()函数的时候,完全有可能采取不同的行为。

在没有使用AOP的时候,setName要么自动save,要么不。但是有了AOP,是否自动Save可以在后期运行态的时候动态确定了,这样对于addMember这样相对"静态"的代码,就不好处理了。这就是我感到比较困惑的地方。
0 请登录后投票
   发表时间:2004-09-03  
pulic class Foo{
  private int c=0;
  public String getName();{
    if(c==0);{
      return "Foo";
    } else {
      return "Food";
    }
  }
......
  public void setC(int newC);{
    c=newC;
  }
}


假设这样一个类,其中的getName随着c的不同,会返回不同的值,你怎么办?

所有的类,对外都不过是一个调用的接口,如果你一定要知道他究竟会做什么,才能正确的调用他,那么你的总体设计一定是有问题的。
0 请登录后投票
   发表时间:2004-09-03  
庄表伟 写道
pulic class Foo{
  private int c=0;
  public String getName();{
    if(c==0);{
      return "Foo";
    } else {
      return "Food";
    }
  }
......
  public void setC(int newC);{
    c=newC;
  }
}


假设这样一个类,其中的getName随着c的不同,会返回不同的值,你怎么办?

所有的类,对外都不过是一个调用的接口,如果你一定要知道他究竟会做什么,才能正确的调用他,那么你的总体设计一定是有问题的。

不错。面向接口,就是要面向一个统一的形式。具体的实现语义如何,由组装者决定,使用者绝对不应该操心。
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics