JAVA随笔

 

面向组件的一些想法

     这几天一直在思考几个问题,现在提出了SCA(面向构件)的思想。而现在提出的SCA是在SOA的基础上建立的。而我就我们目前产品的状况,谈一谈我使用古老的技术实现SCA的思想,当然不是建立在SOA上的。因为我们每个模块和每个模块的联系甚小(不好抽出共享service)。还考虑到SOA一些成本的问题。还是用比较本,但应该行之有效的方法解决,以下为解决方案。

     产品背景:研发人员频繁的出差,主要是因为产品在各地市(移动,联通,网通,电信)的业务需求不同导致,需要在主版本上修改功能以满足各地市的需求。这样我们的产品无疑是湖北移动,湖北电信,福建电信,福建移动等等,各出一个版本。其实我们做了很大一部分重复的工作。我们的产品也就不能称为产品,而我们一直在做项目。

     现在就可定制、可复用以节省开发成本提出一些我的想法。
   
     我想我们的产品应该面向组件,也就是说要松偶合,可复用,可定制。我们的平台(基础模块)只包括系统管理(用户、权限及公用工具、也可以用portal)一部分。而其他模块,像作业计划,值班管理,信息发布等等。每个都是一个单独可以部署在主版本(系统管理)的应用。而平台向外发布web servie接口以及也可以传统java方式调用,这些是可配的。这样可以做到每个模块各布署到单独的应用。如果这样我们可能还需要一个单点登陆(除portal)。这些工作是由研发人员进行控制。研发人员提供实施人员页面操作,实施人员通过配置可以将模块(组件也就是作业计划,值班管理)配到平台(基础模块)上。这样我们来维护一个组件库,组件库中包括各模块的应用。组件库的丰富是一个漫长的过程,也就是说,假如我们现在有一个福建移动的作业计划,而不满足福建电信的要求的,若需要新增功能,我想应该在原来版本上进行新增(由研发人员控制),若要修改功能,如果功能修改量比较小,而又对业务要求不是很合适。我们可以试着让项目经量说服客户。如果二义性比较大,这样我们可以在原来版本上新建一个版本,形成一个新版本。OK,现在我们有两个版本的作业计划了,随着时间的增加。我们的组件库越来越丰富。如果某个地市说要上产品一期,我们会拿出需求去比对,按照每个相应的组件去配置形成一个满足某地市的需要。而这些工作完全可以不用研发人员做。而这样,我们就实现了一个可定制的版本。如果这个地市要上二期,我们保持主版本的向后兼容,可以直接将新要上的模块挂上去。

   目前面临的问题:
      1.平台(基础模块)要修改,会改动很多模块。而我的想法是,基础模块的修改应该保持向下兼容。若修改应明确记录,其我们的多个组件也应修改。这样才能使已经上线的产品可以很容易的升级或新增组件。
      2.需要有一个组件管理库,它用来管理组件,组件的版本,主要实现内容啦。修改组件的log,发布的组件啦。这是一个非常重要的事情。应该由研发人员撑控。
      总之主要面临的问题就是版本的管理。

   我目前也只是构思。也希望听听各位的意见。希望能给出意见。可能我的思想很老套了,但确实可以解决我们现在的问题。
 

posted on 2006-12-15 09:45 曲静波 阅读(1371) 评论(6)  编辑  收藏 所属分类: others

评论

# re: 面向组件的一些想法 2006-12-15 11:15 BeanSoft

可以用 Eclipse 插件模式, 或者 J2EE 的思想, 把应用分为 平台层 和 业务层, 然后每个包有个入口的类, 通过配置文件载入然后执行, 典型的例子: WAR 文件.... 当然了, 如果有支持热加载的类载入器(hot-replace class loader), 就可以实现自己的应用不当机升级了. 或者通过定义接口来做, 接口要定义 onDestaroy(), onInit() 这样的方法, 像 servlet 那样, 让容器来知道共同的约定.  回复  更多评论   

# re: 面向组件的一些想法 2006-12-15 11:30 曲静波

@BeanSoft
嗯,这些我考虑过。但是有个问题,您是说把每个组件看一个war吗?这样的话。就会部署在不同的应用。也就会有多个context,如果有8个组件(模块),那就会有8+1(平台)context。这样会不会对效率有影响。如果不是说每个组件看成一个war的话。那就是设计接口实现。但这块我还也是在摸索当中。有这个想法。请赐教。或者您有这方面设计的资料能否共享下呢。  回复  更多评论   

# re: 面向组件的一些想法 2006-12-15 13:06 BeanSoft

我也没什么具体的想法, 倒是可以看看这个开源项目: http://jmoduleloader.tomjudge.com/documentation.php
There are 2 types of module that jModuleLoader is capable of loading: thoes that have a specific generic interface (otherwise known withing jModuleLoader as the loading interface) to the modules code and those that do not. Before developing an application with jModuleLoader I suggest that you read up on java class loaders.

  回复  更多评论   

# re: 面向组件的一些想法 2006-12-15 14:58 曲静波

我看过jmoduleloade了,仔细想了下,其实我的平台已经实现功能项url的配置。也就是说已经有入口了。jmoduleloader反而不会很灵活。而我现在主要是想解决war包,就是不能每一个模块有一个war包。怎么把它拆分出来,放入平台(BS结构)。3x  回复  更多评论   

# re: 面向组件的一些想法 2006-12-15 19:45 fyxruben

是否想说做成服务器端的eclipse ???  回复  更多评论   

# re: 面向组件的一些想法 2006-12-18 08:55 qujingbo

@fyxruben
他指的是eclipse插件模式。就是你要按照一定的规则(eclipse给你的接口,你需实现)开发。而我们做的是bs,确实可以借鉴这种方法。但是现在我们的平台是配置url,灵活性比eclipse插件好用。  回复  更多评论   


只有注册用户登录后才能发表评论。


网站导航:
 

导航

统计

常用链接

留言簿(3)

随笔分类(9)

随笔档案(8)

文章分类

友情链接

搜索

最新评论

阅读排行榜

评论排行榜