CMP2.0在大型企业系统设计之中究竟应该使用到什么程度?有大型应用开发经历的人请进来一谈!
本人在对系统进行详细设计的时候遇到了困难,加上我以前一直想不同的问题,总结如下:
1 系统之中的所有表之间都是有关联的(一般情况都是这样的),而这样的话从EJB2.0的角度来讲,就应该把它们全部或者大部分映射成CMP(既然EJB2.0对性能的提升有了很大幅度的提升,那么我是不是可以这样使用CMP?),但是这样子的设计我担心风险会很大?因为我对CMP在高频度访问(包括查询和更改)情况下的性能不清楚(没有亲身经经历开发过测试,仅限于资料上查阅)。 很多人说:牺牲一点效率换来系统架构的灵活伸缩性是值得的,但象这样的情况会不会牺牲非常多的效率,以至于系统的负担过载?这个使用的量的控制我还不会把握。
2 CMP是能够在应用程序之间共享的,那么在访问数据频率越高的情况下性能体现得应该越卓越! 可是为什么还是有很多帖子说:为减低内存使用率,建议查询不要使用实体BEAN,而在更新的时候使用? 这岂不违背了EJB的存在目标了。而且这样的实现系统日后维护的工作量岂不是也成了双份的了?
3 按照mastering EJB(2nd)这本书里讲的,实体BEAN是数据封装的第一选择(尤其是CMP),并且可以通过一定的优化(如:设置总是使用LOCAL BEAN、对只读是BEAN设置成永久缓存、尽可能使用CMP等)来改善性能,那么我们是不是可以尽可能地使用它了呢?
最后回到我的主要疑问上来: 一个大型企业系统设计适合使用CMP来作为数据封装层吗? 如果不是,那么什么样类型的数据(表)应该挑出来改用其他方法实现?而什么样类型的数据(表)尤其值得用CMP封装呢?
(注:对于BMP我个人觉得适用的情况极少,大部分可以用session bean + JDBC来替代,而且如果真的要用,BMP的设计者也应该具有相当的程序和数据分析能力才能写得好,所以这里暂不提。)
****另外我发现几篇文章,其中之一地址如下,有兴趣的人可以去看看:
http://www.umlchina.com/CBD/ejb20.htm
在那里,作者介绍了CMP的依赖值对象(dependent value class)的概念,是一种轻量级的,替代CMR关系的解决办法。 我想如果有了这个东西的话,至少可以缓解一下滥用CMP的情况,为系统减轻一些负担。可是网上其他的文章都没有提到这个东西,在很多EJB容器的XML实施描述符里面也没有<dependents>这个标签,难道这个概念是错的? 有没有人可以为我解释一下?