我现在所在的公司是维护自己网站的,现在从当初小的规模已经渐渐变成大型的网站,但是随之而来的麻烦的事也出现了,比如,在一个web工程中有上千个配置文件,有上万个java类,而且各个子模块之间有很多耦合性。导致我现在启动web工程需要2分钟,有时启动的时候甚至会内存耗尽。
      现在的情况是,我自己维护的模块其实只有几张jsp页面,和几个java累,倒是混合在这个庞大的代码沼泽中,如果别人提交svn的代码有啥错的话,往往会导致我无法启动,为了查找原因我常常需要花很长很长时间。这样导致我写代码的效率很低,而且每次为了调试而启动tomcat的时候常常需要花很长时间。
   上面的头儿可不管底层架构如何,他才不管架构是否混乱,但是我也知道这样下去是肯定不行的,总有一天我会没法调试web程序的。
   我也想过将一个大的web工程分成几个context,但是,这个分离过程非常麻烦,如同抽丝剥茧一样。
   不知道有哪位有架构师有维护大型网站代码的经验,在一个大型的web项目中实践分而治之的原则。
   最近我们听说有osgi,听介绍的时候貌似可以解决我们现在的问题,我想听听有哪位大侠能够给我指点迷津。

解决方案 »

  1.   

    在一个web工程中有上千个配置文件,有上万个java类,而且各个子模块之间有很多耦合性
    ---------------------
    你这个够雷的,重构都难。
      

  2.   

    问题是必须重构,但是我现在没有很好的办法如何把这整个web工程分开来,各位有啥好办法?
      

  3.   

    把一些核心业务类和工具类的分成多个工程,将其打成jar包,修改需求的时候,根据不同的部分改不同的工程,能稍微好些,但重构是必须的
      

  4.   

    这是个非常麻烦的事,看来用java写的面条程序比asp维护还麻烦.至于调试,你自已编写的,最好用单元测试,就不存在你启动就要好几分钟的问题.
      

  5.   

    这个大型的网站应该分为好多模块吧
    把每个模块当成一个工程 发布
    每个工程都用web service去偶联
    我现在做的项目就是这样的
    我们每个人都是在开发自己的模块
    放到tomcat中启动就可以了 在webservice中的service.xml配置接口 实现接口
    不知道 会不会给你点提示
      

  6.   

    MVC就是这么玩的。不过看到LZ这么庞大的系统,牵一发而动全身啊!如果按照MVC的结构来的话,三层各自分离,互相呼应,问题就会简单很多了。数据层的东西一般都不会轻易动,控制层和表现层可以在同一工程内部访问数据层,也可以与数据层分处不同的服务器,以XML进行数据传输。如果开发的时候把每个功能归类成为不同的模块(就像数据层在中间,发散出很多射线连向不同的功能模块),各个模块之间不影响,又可以互相调用;可视层在控制层之上,也是独立模块,这样:DB -- Servlet -- JSP 的结构就很灵活了,不论是分布开发或者维护都容易很多,控制层和可视层每个模块的维护和修改不会影响到系统的其他部分,而DB层的改动只会导致控制层某些模块的变动,而不会影响到别的东西。
      

  7.   

    谢谢大家的指点:
      经过几个月的摸索,我们终于找到了一条可行的方案:
    1.就像 xuyang840117所说的那样在服务端用webservice类似的协议将各个模块按照业务来解耦,不过我们用的是java分布式解决方案中常用的rmi协议来解决。
    2.使用osgi的方案来解决原服务器端的各个模块之间的解耦,这样原先各个模块之间还是有耦合,但是能够实现热插拔,可以对系统中的某个单独的模块进行开发测试。这样对开发来说效率就非常高了。daisycool 说的mvc的开发模式我们一直在用,但是问题是我们的程序员没有很好地理解mvc的真正意义,所以经常会将一些control的业务逻辑写到jsp中去造成页面难以复用,所以在项目开发过程中,必须要建立一套详细且清晰的规约,让大家来遵守,这个是非常重要的。
      

  8.   

    不建议重构。建议把自己做的代码从工程中单独拿出来做成jar包,仅凭几个简单的接口与整个工程整合,自已写几个简单的mock模拟环境,自成一体。别人的代码,让别人去跑吧。
      

  9.   

    我觉得这个想法的初衷和osgi模块化,支持热插拔的想法是一致的,试想如果项目中如果每个开发人员都按照这样的思路去开发,那到时候如果没有一个统一的接口或者标准的话,那一定会是从一种混乱形态转变成另外一种混乱形态,如果要引入统一的开发规范的话,我想osgi是最好的选择了。
        这位老兄说的我深有同感,现在公司中的诸多所谓的大牛只对什么分布式存储系统,什么分布式cache系统,什么异步消息系统,这些看起来比较高深的东西感兴趣。但是对我们最基础的代码报以能跑就行的态度,在开发的时候根本没有什么统一的规范,web工程中已经下线的代码也不去掉,弄得现在代码悦来越大,像一个庞然大物。
        代码能跑就行了,我觉得有这种想法的人只是把程序当作混口饭的职业来看待的,一个真正意义上的程序员必须是像爱戴自己的亲人一样地,爱自己写出来的程序,经常会用苛刻,并且挑剔的眼光来审视自己昨天写过的代码到底有没有什么不完美的,进而来打磨它,让它更加完美。
        我们个人的力量虽然有限,在一个公司里你的职位不够高根本没有话语权,即使有话语权,也要考虑在项目上线截止日的约束下有没有足够的资源来做这件重构这件事。但是,没关系,我告诉我自己,我是一个优秀的程序员,我会竭尽我所能来把这些技术难点来攻克,这就是我的价值。
      

  10.   

    这个能讲具体一点嘛,学习中。有没有相关文档,能不能发我一份,[email protected]谢谢
      

  11.   

    如果要具体说说怎么做的话,我自己博客里面倒是写了一些这方面的文章,大家可以看看。
    如果需要看代码的话可以发邮件来。
    http://blog.csdn.net/mozhenghua/archive/2010/01/16/5199209.aspx