由工程的组织结构所引发的…

FuqiangWang


2014年从msn space存档中重新恢复出来!

昨天刘石过来找我,想让我在原来领受书project的基础上给他重新建立一个工程(project),然后他好在原来的基础上进行开发,而不用说一切从头开始,这样也可以重用原来的一些services,虽然当时我认为没有必要为了一个新的文书发送功能就新建一个project,并且认为直接在原来 project下进行开发也没有什么不妥,不过,后来在其一再要求下,我还是copy了一份receipt功能,然后share到了CVS服务器上。

后来想想,实际上,我觉得我当时的想法是恰当的。造成现在这种形势的原因,我想是因为credit组一贯的工作作风引起的,呵呵,不是说有多么的罪大恶极,不过,确实可以通过其他方式来让工程的组织结构更加合理一些,冗余也可以削减不少。

原来只要有一个新的功能,如果不是BackOffice相关的,就会独立的为其建立一个新的project,但通常的情况下,这种项目结构组织方式存在一定的局限性,最突出的一点就是会造成很大一部分冗余的存在。

我们以现在的BackOffice工程组织来看,他分成了三个独立的project,而project的划分也仅仅是根据源码完成的功能大体完成的,因为三个工程独立存在,他们拥有自己的classpath,而这三个独立的classpath中的entry要毫无交叉,这种情况可能少之又少,事实也的确如此,三个project的classapth中存在很多个重复的dependencies,单从这一点,我们来看会造成什么问题:

第一个,最明显的情况,每个project拥有自己的一份classpath拷贝,相同的dependencies不能共享,这是很明显的冗余情况,还有就是,像上面的为刘石copy工程的做法,services代码的重复存在等,都是冗余的表现,而你要为这些冗余付出存储空间和管理的代价;

第二个,各个工程的dependencies中,即使存在相同的entry,但有可能这些entry的版本不一样,比如,project1中的 hibernate可能是2.0.x版本,而project2中则可能是hibernate2.1.x版本,这些dependencies如果最后一同发布的话,在一个classpath中就会存在hibernate的2个不同版本,而通常的项目都是默认的classloader从单一的classpath来完成类文件的加载,这个时候,势必造成类文件的版本冲突,为系统的稳定运行埋下隐患;

第三个,虽然从某个角度来说,使得项目一依赖与项目二是合理的,但如果存在项目二反向依赖项目一的情况的话,现在的工程组织结构又凸现出不合适的地方,比如项目发布的时候,会根据project1里的config文件发布不同版本,而project2中后期发现需要访问这个config文件来实现相应功能,同时project2原来并不依赖project1(project1依赖project2),这个时候project2就陷入某种两难的境地(最少2中方式解决,但都不是很合适)。

而这些问题其实可以通过很简单的一个结构组织的调整得以解决:类似以上情况,我们完全没有必要将一个项目分成多个来管理,而是只管理一个项目就可以了,唯一需要改变的就是,为可以模块化的功能提供单独的 source folder!这样,所以的dependency现在可以统一到一个classpath进行管理,而以上的冗余也不会存在,就算原来各个工程中的不同版本类库冲突的问题,现在也因为只需要在当前classpath中维护单一版本的类库而得以解决。(题外话:实际上,解决第二种问题的方式,可能因为各个项目环境的不同而不同,虽然,可以通过我上面说的合并方式可以解决,但不能说解决了所有情况下的类库冲突问题,因为有些时候,需要依赖不同版本类库的情况是存在的。不过,即使遇到这种情况也没有必要烦躁,呵呵,依然可以解决 ,比如,你可以写一些相应的自定义classloader来分别加载这些类,或者,为了偷懒(或许说为了避免重新发明轮子更确切一些哈),你可以借助于OSGi,你都用EclipseIDE开发了,不会连他的插件体系如何实现的都不知道吧?!一个道理的啊,呵呵,如果觉得adapt这个体系到你的需求不容易,你也可以借助于objectWeb的oscar,他也是OSGi的一个实现,应该可以帮助你解决相应问题)

其实,问题的解决通常并不一定就只存在一条解决的路,这条路可能你很熟悉,知道能够达到你的终点,但是,不要排斥其他的路线,或许,还有比现在你知道的路更近,或者更好走的路也未定。不要让定式思维禁锢你,条条大路通罗马,为什么不找一条最适合你走的路那?!

Apple的理念:THINK DIFFERENT


>>>>>> 更多阅读 <<<<<<


欢迎加入「福强私学」

跨越2190个日夜,始终坚持“实践 + 原创”打造的715125字专属知识库,囊括了(但不限于)从职场、技术、管理与商业等多个板块的内容。

  • 一个ChatGPT触达不到的地方
  • 一个带你超越AI/人工智能的地方
  • 一个与你一起成长的地方

https://afoo.me/kb.html


开天窗,拉认知,订阅「福报」,即刻拥有自己的全模态人工智能。

订阅「福报」