移植Java代码到C++的心得
在实际的开发过程中,我们的项目或产品通常都会用到一些第三方开源组件或商业组件,以帮助开发人员实现一些特定的通用功能,如xml解析,正则表达式解析和数据压缩等。一般而言,只有在这两者均无法满足现有需求的情况下,我们才会考虑自行研发。因为适当的应用第三方组件可以保证开发人员能够将更多的精力投入到产品的核心算法和核心业务逻辑上,从而确保产品的开发周期和产品质量均能达到客户与公司满意的程度。
相比于开源组件,很多商业组件都提供了更易于操作的用户界面,丰富的文档和示例代码,以及更灵活的接口和更多的功能。通常而言,一旦我们选定了某一商业组件,它所提供的功能就已经可以满足我们的需求了。然而对于开源组件却并非总是如此,我们偶尔会需要对其进行部分修改或对其接口进行二次封装,所幸的是,主体功能不会受到影响。众所周知,Java的开源社区极为活跃,提供了功能丰富的众多开源组件,相比于Java,C++的开源组件在数量上和功能丰富程度上都要相形见绌了。鉴于此,我们可以选择将已有的Java组件的部分或全部功能用C++重新实现,并形成自己的基础组件。和完全自行开发相比,这样的方式确实降低了一定的风险,但仍然是一条布满荆棘却又充满挑战的坎坷道路。然而在整个代码移植的过程中,却可以让开发者受益匪浅,下面列出主要几点:
1. 很多开源组件都是由编程经验丰富的开发者完成,其设计风格和实现技巧,以及对细节问题的处理方式都会给我们带来一定的帮助和启发。
2. 纸上来得终觉浅,绝知此事要躬行。很多设计技巧只有在亲自编码或给自己写Test Case的时候才能真正体会出来。
3. 可以更好的理解两种语言之间的差异,并充分挖掘他们的潜力,甄别各自的优缺点。这样在今后的开发中就可以更好的驾驭这两种语言了。
4. 很多时候语言的差异确实影响了组件的设计,我们的目标是充分利用当前语言的特性来完成我们的设计与实现,而不是用一种通用的方式应对所有的语言,这样往往会给人一种橘生淮北的感觉。
5. 在实现的过程中,可能因此而掌握一种算法或通用的业界标准。
6. 如果有些算法或功能是自己擅长的,则可以利用这个机会将其嵌入到重新实现的组件中,这样不仅可以验证自己的想法,同时也可以提高新组件的性能和可扩展性。
7. 有针对性的剔除部分冗余代码或功能,以提高新组件的效率和易用性。
8. 相比于完全自行研发,由于已有的组件已经对很多边界问题进行了处理和分析,因此该类问题也会在新组件中得以解决,这样便可以极大的提高新组件的稳定程度,从而大大的缩短单元测试的周期。
需要说明的是,这里列出的问题和解决方法仅仅为本人的实践经验,如您有更好的办法或遇到新的问题,本人诚挚的希望与您多多交流,共同提高。