|
我一直在从事企业信息管理系统的开发,目前的产品拥有了数百个企业客户,作为企业管理信息系统,最大的挑战是如何满足不同企业通用需求的同时快速满足企业个性化需求,除了企业战略、组织架构、流程体系等紧密相关外,软件的平台化水平,可扩展性和灵活性至关重要。有一句话很经典:“最好的架构师是能够在软件开发所涉及的诸多内部因素和外部因素寻求最佳的平衡”。一个高度平台化的系统,对高可扩展性和灵活性是非常关注的,今天我想讨论如何满足企业信息管理系统的扩展性和灵活性。这个话题涉及的内容太多了,我只是在做产品和项目过程中谈谈我的体会,希望对大家有一些参考价值。
(1)高可扩展性和灵活性的系统一般是分层架构的,这里说的分层是指将客户的需求按需求的通用性分层。根据自己平台所应用的目标客户群,分析客户的共性需求,将共性部分的需求放在平台的最底层实现,所有的客户共用,不要有分支版本,个性的需求放在高层实现,不同的客户可以完全定制。至于整个架构的层次数量没有绝对的标准,可参考的方法分为4层,“公共平台层”、“产品平台层”、“行业扩展层”、“个性扩展层”。这里的分层与软件架构中的表示层、中间层、持久层的分发属于不同的维度,是没有冲突的。
(2)高可扩展性和灵活性的系统一般是模块化的。系统最好提供统一的主板插件体系,每一层都应该提供若干插槽,通过二次开发的手段供上层扩展,做项目多了一般都会形成组件库,应该对这些组件进行分类分级管理。一旦有了新的项目,一般从现有的组件库中挑选进行配置,部分不满足要求的可以进行修改后满足,其他个性化很强的完全定制。
(3)高可扩展性和灵活的系统一般都支持数据建模。许多人理解系统可扩展就是指系统提供API,可以二次开发,其实这种理解不全面。数据结构是企业信息管理系统很重要的一部分,是否可以方便支持数据结构的扩展非常重要,我们的经验是提供图形化的数据建模模块,可以自动生成数据库的表结构,同时将数据库的结构也保存为元数据,通过解析元数据可实现数据的对象关系映射,而不依赖于硬编码。一般采用了数据建模的系统将数据进行对象化统一管理,这样的好处是统一风格,也容易实现。 因为有了元模型,可以动态生成部分用户界面,减少用户界面开发工作量。
(4)高可扩展性和灵活的系统一般都支持流程建模。不同企业的业务流程是千变万化的,所以需要提供业务流程建模模块,可以用图形化的方式定义企业的业务流程,依赖业务流程的驱动完成流程的自动化。流程建模中涉及的“活动”(理解为节点)除了标准的之外,也要求是可以自定义的,比如流程中某个节点可以控制生产设备的启动和停止。流程中另外一块是控制逻辑,包括线性、分支、循环、并发等。流程一般需要人的参与,所以与任务管理是紧密相关的,可能会涉及集成email,手机短信实现自动通知等。流程中流转的数据可能也与流程的执行过程相关,比如请假单大于15天,流程可能执行另外的分支。
(5)还有一个需要说明的是状态模型。一般数据对象都有多个状态,比如订单就有未发货、已发货、已到货等状态,不同状态下可执行的操作也是不同的,不同的状态下的权限也会有差别,比如已发布的图纸就应该是不可修改的,即使有修改权。对象的状态模型一般是和流程紧密相关的,一般流程的执行过程会改变数据的状态,比如请假单批准以后,请假单的状态改为“已批准”。状态的定义以及状态的变迁过程可以定义为状态图,只有有连线的两个状态之间才允许状态的跃迁。综上所述,一般按数据类型定义状态图,不同的状态有不同的操作和权限,一般依赖于各种操作或流程改变对象的状态。
(6)权限模型最好也可以扩展。不同的数据类型通常有一些共同的权限项,比如浏览、修改、删除等,也应该有一些特有的权限,比如用户就有“修改密码”权限项,用以控制一些特别的操作。应该支持自定义的权限项,不同的类型授权时权现项不同。一般权限的判断算法比较复杂,一般不要求可以自定义,主要是因为性能的原因。权限的授予一般也有粒度要求,最小的按单个个体授权,最大的按类型授权,另外一种建议的方式是采用类似文件夹的形式对数据进行管理,可以提供按目录授权的方式,这样就更加灵活了。
(7)还有个重要的就是报表。不同的类型都应该可以自定义报表,不同的角色可以看到不同的报表。最好建立报表的框架,开发一个新的报表以后,通过简单的配置,不依赖于修改代码,就可以通过系统访问到报表。报表的各种操作,比如是否可以打印都可以借助配置实现,也可以借助权限体系实现。
(8)还有一点需要提到的是主菜单和主页。企业中不同的角色都希望只看到与自己工作相关的功能。这就需要可以按角色自定义主菜单和主页,主页的自定义可以采用Web part的方法,用户可以选择自己需要的Web part,添加到主页上,通过拖拖拉拉摆放成需要的方式。
最后简要总结一下,一个系统的可扩展性和灵活性应该是多方面的,包括了分层结构、模块化、数据建模、流程建模、报表定制、主菜单和主页定制,甚至还包括权限体系的扩展等方面。当然还包括硬件方面的,如何在高并发和海量数据情况下实现硬件的可伸缩性,还可以采用集群、缓存、云计算等技术。当然真正要构建高扩展性和灵活性的系统难度是很大的,通常都会遇到诸如性能问题,当然我一直最求的一句话“在这样那样的要求下寻求最好的平衡”,大部分问题是可以解决的。
it知识库:企业级信息管理系统的高可扩展性和灵活性,转载需保留来源!
郑重声明:本文版权归原作者所有,转载文章仅为传播更多信息之目的,如作者信息标记有误,请第一时间联系我们修改或删除,多谢。