模块化已经成为了软件产品行业的共识,从产品研发、工作效率提高、人员更迭频繁多方因素考虑,模块化也是构建软件产品最好的方式。
我对软件产品模块化的范式理解是:模块化=工具包+业务插件+业务流。
工具包:工具包就是除了开源提供的技术外,更重要的是我们根据业务特性研发的行业工具包。我们通常说的工具包会有框架、第三方运行配置(比如定时调度等),这些我们都可以通过网上学习总结并整理好放置在开发库。更进一步地,我们需要对集装箱港口信息化软件产品的工具包进行研究分析,形成我们的行业工具包。比如柜号合法性检测、堆位合法性检测、舱单业务数据验证(毛重与净重、提单重复等逻辑检查、集装箱号数据关联度检查等)、港口地理位置信息检测、调度任务关联度检测、……。当然,对于普通的工具包我们更应该进行归类整理,比如文件导入导出方法、移动端自适应、不同数据库之间数据连接、割接(以适用不同客户数据库部署要求)等。
业务插件:比较陌生,但是我们一旦联想熟悉的eclipse开发工具,我们就很清晰这个概念。eclipse开发工具可兼容使用多种语言开发产品,开发java语言产品、C语言产品、C++语言产品,都不是每个语言安装一个eclipse软件,而是在一个eclipse开发工具上通过加载相应的开发插件完成开发环境搭建,我们是否可以借鉴这个思想构建港口信息化产品呢,答案肯定是可以的。
业务流:任何信息化产品,流程是不能避开的,只有流程才能清晰定位角色,才能清楚谁做什么,用哪些功能做,输出什么。可是,业务流配置,一直是软件产品随需而变,满足用户需求最大的困难。
我对业务流的理解是:变量定义→数据组装→操作约束→动作边界→状态变更。
数据组装:程序员很熟悉的一个词,数据封装,在面向对象软件开发中,数据封装就是一组数据和操作的集合,也就是类。而业务流的数据组装也是类似,在流程动作发生前,需要对操作的数据进行一些预处理,预处理过程就是数据组装。
操作约束:界定谁什么时候需要进行动作,什么时候停止动作输出结果,转向下一个流程,操作约束包括两个层次,一个是操作条件,另一个是操作权限,也就是我们说的用户对象。
动作边界:规定流程节点只能做什么,禁止操作处理超出边界的内容。
状态变更:动作执行后,业务处于什么状态,特别地,对于港口系统产品,状态变更的准确设计,对客户的下一个操作环节操作体验具有重大影响,比如根据状态展示不同的操作按钮、显示不同的信息列、跳转不同的操作模块等。
总结上述内容,以下三点为个人认为成功的产品基础支撑点:
功能符合需求;
用户使用便捷;
界面简洁美观;
最后,用万维网之父蒂姆·伯纳斯·李的经典名言作为本章节的结语:简单和模块化是软件工程的基石;分布式和容错性是互联网的生命。