花钱的年华

--今天开始成为主站

用户操作
[即时聊天] [发私信] [加为好友]
江南白衣ID:calvinxiu
707589次访问,排名53,好友0人,关注者54人。
calvinxiu的文章
原创 161 篇
翻译 0 篇
转载 0 篇
评论 677 篇
江南白衣的公告

肖桦,江南白衣,
开源项目SpringSide
春天的旁边
发起者

最近评论
liseo1:
网络营销策划 网络公关 品牌管理 搜索引擎公关 搜索引擎排名 网站优化 软文发布 QQ:441843869
工业门
afd:adgfdahfdah
dsfahgfgjhkj
jfrjunbcbxzx,mbbu
afd:adgfdahfdah
dsfahgfgjhkj
jfrjunbcbxzx,mbbu
afd:adgfdahfdah
dsfahgfgjhkj
jfrjunbcbxzx,mbbu
afd:adgfdahfdah
dsfahgfgjhkj
jfrjunbcbxzx,mbbu
文章分类
    收藏
      相册
      Blog用图
      Friends
      @_@
      Anders小明
      buaawhl
      cac
      canonical
      cctvx1
      david.turing
      femto
      g9
      JohnsonQu
      Michael Chen
      Raimundox
      robbin
      SimonLei
      totodo
      wuyu
      周爱民
      孟岩
      差沙
      庄表伟
      落魄的程序员
      透明
      郁也风
      铁手
      银狐999
      飞云小侠
      存档
      订阅我的博客
      XML聚合  FeedSky
      订阅到鲜果
      订阅到Google
      订阅到抓虾
      订阅到BlogLines
      订阅到Yahoo
      订阅到GouGou
      订阅到飞鸽
      订阅到Rojo
      订阅到newsgator
      订阅到netvibes

      原创 MartinFowler: IOC, not IOC Container收藏

      新一篇: Groovy 笔记 | 旧一篇: Groovy写业务类、框架类的那一吨好处

           作者:江南白衣 

            以Spring为代表的提供依赖注入的IOC Container风头越盛,比起IOC的原本意义,DI逐渐有妹仔大过主人婆的姿势,所以Martin Fowler同学忍不住写了篇blog,提醒一下大家IOC的本原--一种作为"所有Framework与API Library最根本的区别点"的Design Principle。
            当年侯捷同志是以VC下的MFC作例子,马同学与时俱进,换了Ruby、Junit、SWT来教育时下的新新人类。
            IOC原理是老生常谈了,可以看马同学的blog。当应用复杂时,都应该考虑把封装从线性调用的API级,提升到奉行IOC的Framework级。

            我更关心如何把自己的代码交给IOC框架调用。
            1.闭包,匿名内部类,函数指针
            如果仅仅把一段代码plug给框架,Groovy、Ruby的闭包是最简单快捷的,再看Java中匿名内部类的做法,比如SWT的事件绑定,Spring的JDBC Template,代码之难看令人心酸,很无妄的的要多一个接口名,一个方法名和两层嵌套,见Martin Fowler的<闭包>的中文版.

            2.Template模式,策略模式       
            如果要把一组关联的代码绑定给Framework,则通常会定义出一个接口。这里的接口是广义的。GOF里有两种模式:
            一种是模版(Template)模式,几种最简单、最古老的模式之一。在父类里面定义Control flow,留下钩子程序的位置。而在子类里实现这些钩子程序,Junit的setup()和tearDown()就属于这种类型。

            另一种是策略模式。Template的一个重要制约为两者必须是父子关系,这对于单根继承的java有点不便。另外,策略模式在灵活性上显然更胜一筹。策略类只需要实现某个接口,容器就可以在适当时进行调度。比如EJB,和Swing都是这种模式。

            3.消息绑定
            最后,MS家还有个更高明的消息机制,可以实现更灵活的绑定。

            4.AOP, cglib和Annotaton
            另外,马同学没有讲的,因为AOP和元数据的出现,框架本身又有了新的封装方式。
            框架可以用AOP更隐式,无侵入的提供服务,Annotation可以更简洁的告诉框架如何提供服务。

            比如Spring 的JDBC Framework ,封装了连接,事务,异常的管理,让你可以专心的写SQL查询。但那些个匿名内部类让你怎么看怎么不爽,而Java又的确没有闭包......这时你可以用Spring的声明式事务管理机制,你只要把业务代码写成普通函数,而Spring会利用AOP隐式的包裹你的代码提供连接、事务的管理。

            如果你不喜欢用xml配置文件声明事务,可以自己用cglib+annotation简单实现一下。甚至,如果你连 annotation也不喜欢,还可以学习rails, 用纯命名约定搞定,只在必要时采用annotation辅助。

           潮流兴用Ruby写Sample Code.   
          
      还有一样事情,就是马同学开始喜欢用Ruby来写sample code。发现Ruby写sample code的确好,读的时候像伪代码一样清晰简单,写的时候也可以一气呵成,没有太多无聊定义与制约,也不用怕别人投诉代码编译不了....

      发表于 @ 2005年06月30日 17:38:00|评论(loading...)|编辑

      新一篇: Groovy 笔记 | 旧一篇: Groovy写业务类、框架类的那一吨好处

      评论

      #dali 发表于2005-07-04 09:27:00  IP: 61.186.252.*
      Martin Fowler应该算是老师吧
      #xmltch@mail.com 发表于2007-09-02 21:15:41  IP: 216.67.223.*
      ncupbgi wevxhb hvxtoz rgcts hsfnlijk vdrhbwfps fozcwm
      #xzjh@mail.com 发表于2007-09-02 21:16:25  IP: 217.237.173.*
      tdnum hfzwrolb qoexf rupt livcq vhqofx aifso http://www.fmzu.kvlshyqug.com
      #osdrtpjwc@mail.com 发表于2007-09-02 21:17:42  IP: 61.241.146.*
      lcmuafn rujfbsczk tdryahx oyzsat byqugj vpgar enpbkc czglxd kdyibmlwj
      #osdrtpjwc@mail.com 发表于2007-09-02 21:17:47  IP: 194.9.85.*
      lcmuafn rujfbsczk tdryahx oyzsat byqugj vpgar enpbkc czglxd kdyibmlwj
      发表评论  


      登录
      Csdn Blog version 3.1a
      Copyright © 江南白衣