现代应用系统极少从0开始构建,基本都会使用现有工具,如组件,库和框架,有以下原因:
- 应用的规模,复杂度和成熟度都在上升,而要求的开发时间却在持续减少。 使得需要开发者的时间和精力都要专注到业务逻辑上,而不是基础设施上。
- 广泛使用的组件和框架非常可靠,比自己现造一个轮子要经济。
- 网上有很多免费的高质量软件可用,采用它意味着更低的开发成本和更容易找到熟悉该技术的开发人员。
- 软件开发和维护是人工密集型工作,所以购买或许比自己开发划算。
所以为自己的应用选择合适的工具需要深思熟虑,在技术选型的时候以下事项需要纳入考虑:
- 不同工具依赖不同的上下文。 如依赖的基础设施,控制模型,数据模型,通用协议等。这可能导致应用和工具的体系结构不匹配。或为了能匹配,会需要写更复杂的代码。
- 不同的工具有不同的生命周期,当升级其中一个工具时可能变得及其复杂,并且新增新功能,设计变更,甚至bug修复也会导致跟其他工具不兼容。采用的工具越多时,这种问题越容易出现。
- 一些工具需要相当多的配置,经常意味着一个或多个xml文件,很快就容易失控。配置的复杂性会导致应用难以维护和扩展。
- 当应用重度依赖商业产品会导致这些方面被严重制约:可维护性,性能,可扩展性和价格等。
- 当你打算使用免费软件,你可能会发现并非真正的免费,可能需要购买商业支持,可能需要花大量的精力去学习,完善,融合。
- 需要关注授权许可说明,即使是免费软件。 如在GNU协议之下的自由软件天生具有传染性,使用了它的软件意味着自己的软件也要开源。
小结
个人策略是应用刚启动时仅采用完全必须的组件,最初的关注点在底层的基础设施组件,如在分布式系统中使用中间件替代使用原生的socket。同时建议将业务对象和外部工具通过接口或分层的方式实现隔离,这样可实现工具的可替换性。