面向方面编程

最近研究了一下面向方面编程的概念,实际也不是什么新名词,很多年前就有了,只是当时被面向对象淹没了。当我看到这个词的解释的时候,我想起了在06年我 架构的BBWPS,当时并不知道这样的架构就是面向方面的核心,实际上这样的设计理念并不是什么技术革命和创新,只是一个工作的总结,因为我不是理论研究 的doctor,这些工作就让他们去完成吧。
    在一个系统内开发的时候,很多技术人员觉得很多代码可以重复利用,很多模块可以重复利用,所以模块化开发和模块封装就非常的适用。当我们开发多个系统的时 候,就发现重复的并不只是代码,尤其在面向企业开发的时候,需求往往是变化的,或者是不同行业企业的系统开发,还会有大量的业务重复。举个例子:开发外贸 企业协同办公,会有客户管理,工作流,开发生产企业ERP的时候同样需要这样的服务,做软件开发企业,最好的办法是不是封装这两个服务。让一套系统对外是 服务的组合,服务则是模块的组合,模块则是代码的组合。是不是开发成本更低。这样就产生了一个新问题,服务与服务之间的数据交换采用什么样的标准,我当时 架构的系统是用XML和HTTP进行交换,因为RPC,CORBA这些协议的标准定义范围很小必须是对象接口返回则是XML数组,这样很死板,比如客户管 理只需要从用户登录验证服务中得到是不是验证通过,就要true和false,其他的一概透明,所以要更好更简单的应用服务,就需要一个灵活的通行标准。 现在的IBM已经想出这样的标准,所谓的SOA设计。至于以后是什么样的标准,我还不知道,但是我知道以后的开发模式肯定更过趋近SOA,很多人说我很聪 明,实际上这个并不是聪明不聪明,一个好的开发模式要符合两点,当然安全,质量这些是基础就不说了,第一:敏捷开发,就是开发速度要快,使用简单;第二: 控制开发成本,成本包含技术成本和工作成本,当更多的技术成本被封装的时候也能适当的降低工作成本。
    实际上这种开发模式还有一个非常好的特点,就是业务开发对外完全透明,因为中国人或者说是亚洲人都喜欢以自我为中心,所以很多开发团队在招聘的时候很看重 团队合作,但是这个合作并不是一眼就能看出来或者是可以测试出来,尤其很多技术高手更是这样,喜欢一意孤行。这样的设计模式,就让一个或者少数的人开发一 个服务,从架构,代码和数据库都可以接触,如果系统出现BUG,责任就很清楚,少了代码合作。这样是不是可以避免高手和新手的合作问题,当时我架构 BBWPS的时候也是出于无奈,开发人手层次不齐。把一套服务包干到人,而让技术交流公开化。这样让高手做技术攻关,新手不断升级自己开发的服务,技术提 升很快,这样的技术人员也相对比较全面。
    说到这里,我就说一个不愿意说的秘密,这样的模式也是我带新人的诀窍,给他们足够的空间,架构和开发自己的东西,要用心去体会,这样在开发中,架构工程师 只告诉新人要什么样的数据,能给什么样的数据,至于怎么给,方法是不是合理,那就靠自己体验了,走点曲线就知道直线就是好,因为很多理论是讲不明白的,尤 其刚入门的人,但是自己能体会的到,因为人都很聪明,当我告诉你我带的人已经早超过我的能力了,现在应该相信了吧。这样的人做开发就会形成一个难能可贵的 习惯,做任何开发都会预留对外的接口。尤其在大系统开发的时候分布和并发处理的时候,就知道这样的系统架构横向扩展很简单,整体迁移成本很低。
    最后我奉劝做系统架构的人和带队的一点话:任何时候都把人的因素放在第一,不要一味的追求技术攻关,把人布局到系统开发的各个方位,只有人才决定系统,而 不是技术决定系统。不要教别人怎么写代码,不要教别人怎么做架构,而是教会别人怎么去思考。自己不是高手,高手都在未来。

猜你喜欢

转载自luwenpan-gmail-com.iteye.com/blog/258251