论坛首页 Java企业应用论坛

贫血就贫血,咂地?

浏览 54164 次
精华帖 (1) :: 良好帖 (0) :: 新手帖 (1) :: 隐藏帖 (0)
作者 正文
   发表时间:2005-11-04  
partech 写道

赫赫,你咋只字不提C++多出来的object感念呢?现在你不是也认为不含操作
的业务数据才是最佳的解决方案吗?

c++的对象模型和c的指针拉什么不冲突阿。c里面的结构,指针可以当作函数参数返回值,c++增加的对象一样可以。可以说c++增加的这个对象对c原来的模型是完全兼容的。
这跟aspect可不同。如果纯java代码不能调用aspect,则说不上兼容。

partech 写道

拿goto来比喻aspect更不贴切。
因为object不是面向关注点,而人的思维是面向关注点的,aspect正是在这种
境遇下提出来的。一个关注点跨越多个对象,一个对象包含多个关注点的部分。
这些才导致了OO的混乱。这方面的文章太多,在这里我就不详细阐述。

这些文章多数是自说自话, 拿一个蹩脚的oo设计和所谓的ao比较。aspect确实是根据关注点提出的。但是ao并没有证明oo对这些东西就不能很好的处理。也没有提供很好的解决ao导致的维护困难的方法。也许aop是一个饮鸩止渴的方法呢?


partech 写道

你说的不相容更是好笑,interface还不能直接new出来呢,你能说interface同
class不兼容吗?他们本来就是不同的概念,有不同的用法。

好吧。那个new的说法欠妥。我实际的意思是在java里面能够实例化一个aspect对象,管你是new,还是工厂还是什么?
而且,java里面,所有对象都可以放进collection,不知道aspect能么?
是,很多东西都有不同的概念,不同的方法。但是,归根结底,它们的基本语义模型都是Object。它们都可以被当作函数的参数和返回值,这是一个编程语言的根本。如果这都不可以,那么基本上只能算作两个互不相容的体系了。

partech 写道

别乱想,来真的,要知道你实现的yanContainer是为实际应用服务的。而不是
应用非得要使用你提供的动态。
你具体的例子中,能告述我测试员为啥要动态的输入isolation level?测试
不同的isolation level数据库的不同表现?
没法说出确实的用途,我只能认为你是在毫无目的的乱动。

老兄。反正例子我也举了。你不满意,我也无法可想。就算isolation level你认为没意义,举一反三一下都不能?
我倒也没有太多兴趣帮你想这些例子。我承认这点我不能说服你,但是你知道有这么个“灵活性”的事就够了。你说“乱动”就乱动罢。没必要统一思想。



partech 写道

aspect至少在目前情况下,还不能被injection。但你这个需求是否合理呢?
aspect的实例目前还不能显示的实例化。也就不存在injection的问题。

等等。刚看了xiecc那片文章,他的aspect就是有injection的呀。我还在想:这下糗了。:)

partech 写道

从你下面的例子,说明你没有理解aspect的意图。aspect基本上是关注点的对应
你这样写,不是有把关注点分散到对象中去了吗?

我倒是觉得你没有理解我的意图。一个aspect其实起的作用就是拦截。这就够了。没有可能需要在程序里面做拦截么?你这个结论下的太武断了。程序的需求千变万化,我不认为什么逻辑可以保证绝对不会需要用程序来控制,即使是aspect。
不能就是不能,没必要酸葡萄吧?
0 请登录后投票
   发表时间:2005-11-04  
partech 写道

别说你没在实际项目中运用过。换个名称就来玩我?
这种例子,令人费解,别满眼里都是注入阿。
目前我们针对外界服务的注入问题。
注入bankid?这..........就为了展示你的可decorator性?

我确实不善于举例子。不过我发现你特别善于挑我的例子举的恰当与否。从那个smtpService开始,就开始对我可怜的例子们大加刁难,似乎不举一个完全符合你心意的例子就讨论不下去似的。既然你这么不会举一反三,我就放弃了。
结论可以这样下:
aspect不能提供某些灵活性,但是这些灵活性据partech老兄鉴定不具有实际意义。
这可以了吧?


引用

我是指它是语言的一部分。

难道不是吗?我们讨论的不是如何注入非DomainObject的外界服务的问题吗?

俺还少了一个类阿。


这段恢复有点让我看不懂啊。是针对我的哪句话呢?是不是那个如果没有ioc框架你会如何设计呀?对了,你还没给我介绍你的设计方案呢。

partech 写道

说到你的通用性,你咋不提你这样一通用,开发人员要知道smtpService是如何
进来的,还得理解你的框架呢?确实“人都是有选择的忽略乐自己不想知道的事

这就有点抬杠了吧?用我的设计,你如果不想知道,一样可以忽略呀。如果想知道,至少这个factory可以让程序员知道肯定是factory设置的,完全符合正常人的因果关系的思维逻辑。
用aop呢。你要是想知道可就麻烦了。代码本身单独来看属于有bug的,是通过aop才把这个bug修上。


partech 写道

aspect你都说了使用servicelocator,咋做不到通用?

看看那篇我对xiecc方法的批评
http://forum.iteye.com/viewtopic.php?t=16667&start=45
那个aspect怎么可能做到通用?

引用
去看看aspectJ的关键字perthis,pertarget看看有没有解答你的问题。
另外我加问一句你的框架支持percflow吗?

不好意思。一直对aspect不敢冒,这些细节都不懂。你介意解释一下吗?
我的框架不是aop框架,是ioc。

partech 写道

你一直用OO的思想来理解AOP,就一辈子费解好了。AOP是OO的进化阿,老兄。

我总觉得aop这个名称非常夸大其词。它根本不能像oo,甚至我总结的functional programming里面的co那样,提供完整的解决方案和建模模型,而只能寄生在OO上。
但是这种寄生,又不能和原生语言良好结合,这就会造成很大的问题。
而aop的那些明显的毛病在我看来并不费解呀,再明显不过了。不管这o,那o,不符合基本的因果规律,乱画辅助线,就是大毛病,用什么思想来理解都是这个结论。我看到是你拿了个aop的锤子看什么都是钉子了。:lol:


partech 写道

没关系阿,在domain中设上一些标志就是了,aspect来根据这些标志采取行动。
标志是可配置的。

给出具体解决方案来?仔细想想你就会发现问题多多了。


partech 写道

aspect缺省就是单子,满足你的最后一个要求不难吧。

差远了。注意,我说的是,session1, session2这两个组件都是prototype,也就是说,每次向容器申请,都会得到一个新的实例。
但是,我要求每次只申请一次,然后把得到的这个值交给session1, session2两个property。这样:
Object v = ctxt.get("session");;
r.setSession1(v);;
r.setSession2(v);;

呵呵, 是不是又要批评我“乱动”乐?
0 请登录后投票
   发表时间:2005-11-04  
ajoo:
c++的对象模型和c的指针拉什么不冲突阿。c里面的结构,指针可以当作函数参数返回值,c++增加的对象一样可以。可以说c++增加的这个对象对c原来的模型是完全兼容的。
这跟aspect可不同。如果纯java代码不能调用aspect,则说不上兼容。

partech:
是哦,C++和C的指针不冲突哦,不过数据为啥要同处理它的函数绑在一起呢?这明显是对数据和函数的非法约束嘛,干嘛要引入这种封装的概念,是谁说这种封装就好的。。。。[以下省略500字]。


ajoo:
这些文章多数是自说自话, 拿一个蹩脚的oo设计和所谓的ao比较。aspect确实是根据关注点提出的。但是ao并没有证明oo对这些东西就不能很好的处理。也没有提供很好的解决ao导致的维护困难的方法。也许aop是一个饮鸩止渴的方法呢?

partech:
那你把OO面临的Tangling和Scattering的问题,用OO好好处理一下,如何?


ajoo:
好吧。那个new的说法欠妥。我实际的意思是在java里面能够实例化一个aspect对象,管你是new,还是工厂还是什么?
而且,java里面,所有对象都可以放进collection,不知道aspect能么?
是,很多东西都有不同的概念,不同的方法。但是,归根结底,它们的基本语义模型都是Object。它们都可以被当作函数的参数和返回值,这是一个编程语言的根本。如果这都不可以,那么基本上只能算作两个互不相容的体系了。

partech:
aspect可以继承class,它当然能放到集合里面,目前它只是不能在程序里new出来而已。
代码如下:
public class C1
{

}

public aspect TestAspect1 {
    pointcut create() :call(*.new(..));
    after() returning(Object o): create()
    {
    }
    public String toString()
    {
        return "me";
    }
}
public class TestC
{
           public static void main(String[] args)
           {
               C1 c1 =
                   new C1();
                 boolean hasAspect =
                  TestAspect1.hasAspect();

                 TestAspect1[] testAspects = new TestAspect1[4];
                 testAspects[0] = TestAspect1.aspectOf();
                 testAspects[1] = TestAspect1.aspectOf();
                 System.out.println(testAspects[0]);
                 System.out.println(testAspects[1]);
           }
}
是不是有人也会糗呢?:)

ajoo:
老兄。反正例子我也举了。你不满意,我也无法可想。就算isolation level你认为没意义,举一反三一下都不能?
我倒也没有太多兴趣帮你想这些例子。我承认这点我不能说服你,但是你知道有这么个“灵活性”的事就够了。你说“乱动”就乱动罢。没必要统一思想。


partech:
老兄没在真实的项目里玩过,就别如此强烈的推荐的框架如何如何的好。如果你用过我相信举个实际的例子应该不难。
是的,说句中肯的话,如果你想你的框架得到推广,还真得弄些实际一些的例子,目前类似的框架如此众多,你不贴近一点应用,叫开发人员如何能喜欢起你的框架来?

ajoo:
刚看了xiecc那片文章,他的aspect就是有injection的呀。我还在想:这下糗了。

partech:
tbd

ajoo:
我倒是觉得你没有理解我的意图。一个aspect其实起的作用就是拦截。这就够了。没有可能需要在程序里面做拦截么?你这个结论下的太武断了。程序的需求千变万化,我不认为什么逻辑可以保证绝对不会需要用程序来控制,即使是aspect。
不能就是不能,没必要酸葡萄吧?

partech:
拦截只是aspect的一种表现形式,aspect的作用远远不止于此。
你想在class里面看到aspect的声明,可以使用Inner Aspects。
0 请登录后投票
   发表时间:2005-11-04  
partech 写道

那你把OO面临的Tangling和Scattering的问题,用OO好好处理一下,如何?


看起来好象是在说OO永远都是面临Tangling和Scattering问题,并且OO机制无法解决这些问题,所以今天发现一个问题就去打个AOP补丁,明天发现另一个问题又去打一个补丁。但是实际经验告诉我们,只要积累了足够多的实践经验,最终总是能够精炼出高度抽象、泛用及稳健的OO模型,这时候你怎么办?继续维持这种半调子OO模型加AOP补丁的状况?
0 请登录后投票
   发表时间:2005-11-04  
Partech 的打手来了:

Ajoo 说:
你说的那个假想的框架1,是准备怎么处理程序中new DomainObject()的问题呢?是否也是要用aop硬生生插入依赖?
我是反对这种做法的,因为它让程序代码本身不能直接反映逻辑。这个天外飞来的aspect必须被每个读代码的人理解和知道才行。所以我才给出了一种不依赖aop,完全用oo的传统方法注射依赖的解决方案。

因为它让程序代码本身不能直接反映逻辑 ,这句话我不是很赞同,从程序来看,这个逻辑已经很明确,就是需要依赖于一些组件。
至于怎么获取这些组件,程序本身的逻辑可以不管,这也是现在IOC以致提倡的。
我的理解是,不管是天外飞来也好,地下爬出也好,能够让用户越透明使用的就越好,不用用户必须显式的经过某些步骤来得到组装。
然而,为了达到这个目标,如今真的没有好的工具,除了AOP,AOP如果真的能够达到这种他所说的这种效果,就算项目引入打它的依赖,我还是很乐意的。 但是听说,现在的AOP产品都得对CLass进行bytecode 的 enhancer,这点是很值得斟酌的。 我更喜欢那些Runtime 的基于拦截器的AOP实现。 但是,无论那些,真的希望达到 无缝,透明的组装。 这点希望不是理想主义。
0 请登录后投票
   发表时间:2005-11-04  
age0 写道
partech 写道

那你把OO面临的Tangling和Scattering的问题,用OO好好处理一下,如何?


看起来好象是在说OO永远都是面临Tangling和Scattering问题,并且OO机制无法解决这些问题,所以今天发现一个问题就去打个AOP补丁,明天发现另一个问题又去打一个补丁。但是实际经验告诉我们,只要积累了足够多的实践经验,最终总是能够精炼出高度抽象、泛用及稳健的OO模型,这时候你怎么办?继续维持这种半调子OO模型加AOP补丁的状况?

AOP不能滥用的,其实,正如你所说的一样,使用AOp有一个前提原则,能够OO的就不要考虑AOP。
AOP一般用在能够正交的横切面上,比如上面一直讨论的Service的IOC问题。
这个跟业务逻辑没什么瓜葛,仅仅是注入Service组件而已,我觉得如果AOP能够实现这点,我是很乐意来引入它实现ajoo所说的充血模型的。
0 请登录后投票
   发表时间:2005-11-04  
age0 写道
partech 写道

那你把OO面临的Tangling和Scattering的问题,用OO好好处理一下,如何?


看起来好象是在说OO永远都是面临Tangling和Scattering问题,并且OO机制无法解决这些问题,所以今天发现一个问题就去打个AOP补丁,明天发现另一个问题又去打一个补丁。但是实际经验告诉我们,只要积累了足够多的实践经验,最终总是能够精炼出高度抽象、泛用及稳健的OO模型,这时候你怎么办?继续维持这种半调子OO模型加AOP补丁的状况?

你这样说不是在忽悠我吧?!也罢,等你“最终总是能够精炼出高度抽象、泛用及稳健的OO模型”的时候,咱们在讨论吧。
0 请登录后投票
   发表时间:2005-11-04  
partech 写道
age0 写道
partech 写道

那你把OO面临的Tangling和Scattering的问题,用OO好好处理一下,如何?


看起来好象是在说OO永远都是面临Tangling和Scattering问题,并且OO机制无法解决这些问题,所以今天发现一个问题就去打个AOP补丁,明天发现另一个问题又去打一个补丁。但是实际经验告诉我们,只要积累了足够多的实践经验,最终总是能够精炼出高度抽象、泛用及稳健的OO模型,这时候你怎么办?继续维持这种半调子OO模型加AOP补丁的状况?

你这样说不是在忽悠我吧?!也罢,等你“最终总是能够精炼出高度抽象、泛用及稳健的OO模型”的时候,咱们在讨论吧。

能够OO的就不要AOP。
AOP还是有其一定的适用范围的。这点AOP之父再一篇文章具体说过这个问题,具体连接我忘记了。
0 请登录后投票
   发表时间:2005-11-04  
ajoo:
我确实不善于举例子。不过我发现你特别善于挑我的例子举的恰当与否。从那个smtpService开始,就开始对我可怜的例子们大加刁难,似乎不举一个完全符合你心意的例子就讨论不下去似的。既然你这么不会举一反三,我就放弃了。
结论可以这样下:
aspect不能提供某些灵活性,但是这些灵活性据partech老兄鉴定不具有实际意义。
这可以了吧?

partech:
当然了,剃刀时刻在我手里拿着呢,本人精力有限,实在没时间讨论你幻想的场景,因为是你幻想的,当然没个客观的标准。
不用举一返三,就一个实际的应用场景就行了,仅仅需要一个。
结论应该如此:
yan具有高度的灵活性,但目前没有实际运用的场景,aspect不对这种场景进行假设,aspect目前不提供yan那样的高度灵活,直到这种需求真的出现为止。


ajoo:
这段恢复有点让我看不懂啊。是针对我的哪句话呢?是不是那个如果没有ioc框架你会如何设计呀?对了,你还没给我介绍你的设计方案呢。

partech:
满足你的好奇心理把
public class BankAccount
{
    SmtpService smtpService;
    SmtpServiceFactory smtpServiceFactory; 

    public setSmtpServiceFactory(SmtpServiceFactory smtpServiceFactory)
     {
       this.smtpServiceFactory = smtpServiceFactory;
     }   

    private void send()
    {
      smtpService = smtpServiceFactory.Create(this);
      smtpService.send(getAccountInfo());
    }
}
注意这里是对smtpService使用工厂,而不是BankAccount。


ajoo:
这就有点抬杠了吧?用我的设计,你如果不想知道,一样可以忽略呀。如果想知道,至少这个factory可以让程序员知道肯定是factory设置的,完全符合正常人的因果关系的思维逻辑。
用aop呢。你要是想知道可就麻烦了。代码本身单独来看属于有bug的,是通过aop才把这个bug修上。


partech:
是哦,AOP的用处之一就是可以修复某些BUG。但你说他都属于修复BUG,就不对了。

ajoo:
看看那篇我对xiecc方法的批评
http://forum.iteye.com/viewtopic.php?t=16667&start=45
那个aspect怎么可能做到通用?

partech:
这个问题,还有前面的那个,俺要确认下,才能答复。

ajoo:
不好意思。一直对aspect不敢冒,这些细节都不懂。你介意解释一下吗?
我的框架不是aop框架,是ioc。

partech:
不对aspect有个完整的了解,就站出来指责,也真有你的。
莫非你也和李敖大师一样?“臭鸡蛋闻闻味道就是了,还打算吃它吗?”

ajoo:
我总觉得aop这个名称非常夸大其词。它根本不能像oo,甚至我总结的functional programming里面的co那样,提供完整的解决方案和建模模型,而只能寄生在OO上。
但是这种寄生,又不能和原生语言良好结合,这就会造成很大的问题。
而aop的那些明显的毛病在我看来并不费解呀,再明显不过了。不管这o,那o,不符合基本的因果规律,乱画辅助线,就是大毛病,用什么思想来理解都是这个结论。我看到是你拿了个aop的锤子看什么都是钉子了。

partech:
是的,小孩拿了个剪刀,什么东西都敢剪,咋了?!

ajoo:
给出具体解决方案来?仔细想想你就会发现问题多多了。

partech:
public class xxxDomainObject
{
  private boolean usingSmtpService;
}


ajoo:
差远了。注意,我说的是,session1, session2这两个组件都是prototype,也就是说,每次向容器申请,都会得到一个新的实例。
但是,我要求每次只申请一次,然后把得到的这个值交给session1, session2两个property。这样:
java代码: 

Object v = ctxt.get("session");
r.setSession1(v);
r.setSession2(v);
呵呵, 是不是又要批评我“乱动”乐?

partech:
小朋友不乖可以理解。:)
你这里的v是啥?r是啥?session1,session2在哪里啊?
0 请登录后投票
   发表时间:2005-11-04  
service 的注入是 业务逻辑? 横切面?

例子1
如果当前用户是本公司用户, 使用msn发送消息,
如果当前用户不是本公司用户, 使用mail发送消息,

那么这个MsgSender 的注入是业务逻辑? 横切面?

就是 XXXDao 的注入,也不完全是横切面,也可能夹杂着业务逻辑
例子2
如果当前用户是VIP用户, 使用数据库1
如果当前用户不是VIP用户, 使用数据库2
0 请登录后投票
论坛首页 Java企业应用版

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