R&D 夏敏
本人有幸参与到公司内部企业应用平台的开发团队,并负责部分核心功能以及辅助工具的架构设计和技术实现,在经历了三年左右的平台开发角色的过程中,积累了一些应用架构经验,但同时也感受到平台开发的迷惘和痛苦之处。想到其中一些体会和自己的看法,写下来与大家分享。
什么是企业级应用,应用于企业或行业的,高并发用户数,高稳定性,海量数据,分布式,可定制,抑或是较为复杂的业务逻辑,这些特点都是对企业级应用的注解。什么是软件平台,软件平台是用来构建和支撑应用软件系统的软件环境,它通常建构在系统软件之上,为应用软件提供基础的开发和运行环境,系统软件本身也可以称作一切应用软件的软件平台。因此,企业级应用软件平台就是为开发企业级应用系统而构建的基础软件环境。
企业级应用是在计算机性能得到大幅提升、计算机网络技术日趋成熟的背景下逐渐诞生的,随之而来的各种类型的企业应用如雨后春笋般破土而出,例如财务软件系统、OA、CRM、ERP、CMS、Workflow、Portal以及各种MIS系统等等,随后,企业级应用几乎成为高端软件技术的代名词,时至今日,互联网搜索引擎、网络游戏、虚拟社区等大型应用软件系统已发展得如火如荼,从总体的技术难度的角度看,这些应用软件系统与企业级应用系统不相上下,比较而言,企业级应用的构建对开发人员提出更多的要求,一方面,企业应用往往是指企业应用集成,随之而来问题是:已有系统的扩展、新系统与旧系统的整合、多种业务应用系统的之间的融合;另一方面,企业应用要满足多种类型的业务,有的业务变化频繁,还要满足个性化等需要,因此常常导致企业应用需求的不确定性,或者说需求的变动更为频繁。因此,只要企业的业务在不断调整优化,用户需求也将随之变化,企业应用系统也就需要持续改进,这样的过程常常没有一个确切的终结点,除非系统停止使用。
作为有一定规模的软件企业,其业务核心既包括软件产品,更重视软件服务,既有商品制造业的特点,更具有服务行业的性质,有句话概括地解释了软件的核心价值——软件即服务,这个概念在计算机、互联网应用技术发展到“云计算”理念的时代也仍然没有改变,反而使核心价值体现得更加深刻,变化的仅是软件产品分发的方式和实现服务的方式。
虽然企业应用软件与纯粹的商品化软件有一定区别,但我个人认为企业应用软件的概念要大于商品化软件,因为企业应用软件可以在某些业务领域高度提炼,面向特定范围的应用进行深化、独立化,从而形成业务领域的商品化软件。但企业应用软件又包含更多难于保持长期不变的业务应用,这些软件无法达到提炼为商品化软件的地步,不能一劳永逸地实现业务需求,因此软件企业必须以持续的软件服务来达到业务需求变化与软件功能变化的持续发展模式。
软件产品要有竞争力,要么具有较高的技术壁垒,要么具有低成本规模化的生产销售能力,要么具有超强的市场适应性,软件服务既然是一种服务,就应该强调服务的可持续性和可靠性。因此,要让企业应用软件有竞争力,应当以上述为目标为发展方向,同时软件开发模式也必将朝着平台化的方向演变,只有平台化才能使软件产品具有统一的基础结构和规范有序的产品开发模式,有了这些条件便可以进一步形成产品体系,有了产品体系就有相应的产品线,实现企业的各种应用功能便是我们的产品线存在的目的。现今的制造业很多都具有这种典型特征,因为小规模的、手式作坊式的生产方式不具备产品战略上的掌控能力,缺少长远的、完备的业务解决方案,永远不可能处于市场的主导地位。
企业应用软件具有的特点和软件企业对它的要求是这些,那么怎样给企业应用软件平台定位呢,软件平台应该怎样确立自己的需求,它的开发、运作模式是不是和企业应用软件一样呢,我的理解是这样的:
软件平台在企业应用的需求上再次抽象和提炼,不应该受最终用户的需求的直接影响,需求的提炼要有层次关系。软件平台和应用软件各自处理各自层次上的问题。
软件平台的开发是一种特殊的软件项目,它的用户不是最终用户,而多半是项目开发人员,但仍然要坚持技术和过程管理并重的原则,不能因为用户也是技术人员,因此减少过程管理的比重,甚至轻视过程管理和过程管理文档的重要性,个人认为过程管理及文档应比业务项目的开发更为严格和谨慎,这样才能最后达到事半功倍的效果。
永远不可能开发出万能的软件平台,作为核心架构人员更不应该抱有这样的想法,否则只有付出大量无谓的劳动,而很少回报,甚至产生负面效应。因此软件平台设计之初应该有明确的应用边界,哪些是必须包含,哪些是绝不考虑的,如果之前不能界定清楚,多半会越做越理想化,无形中让软件平台“无所不能”,很多该留给具体应用软件考虑的具体功能,不能和平台功能混淆。
软件平台的开发应该是由核心到外围,由基础到高级的方式进行演化,每个层次都应该经过充分的检验,再向下一个层次迈进,因为软件平台一旦结构性的内容发生变化,就会给使用这一平台的其它应用系统带来不可预知的风险,所以核心架构和基础功能的设计必须以充分了解应用特点的情况下进行,要掌握适度的抽象,并且随时关注应用特点的变化,否则平台给应用项目带来的疑问太多,且没有充分的依据。
最后,软件平台的开发比单个项目开发更需要集体的智慧,因为完备的平台一定是经得起各种质疑和推敲的,所以保持良好的交流沟通非常重要,不论对已有技术的汲取还是获取新的技术思路都具有并常重要的作用,只有经过积极的实践才有可能积累出一条软件平台开发的可持续发展的道路。
以上看法仅是我个人的理解,欢迎大家指正。