门户网站建设解决方案设计

  • 门户网站建设解决方案设计已关闭评论
  • A+

在政府机构中,工商、公安等机构基本都拥有自己的门户网站; 在企事业单位中,各中大?#25512;?#19994;、医院、学校等也有相应的办公门户. 在这些门户网站中,往往会碰到信息陈旧、板块空缺、布局杂乱、进入层次太深、系统更新缓慢、用户很难?#19994;?#33258;己关注信息等问题. 导致这些现象的因素很多,有的因为经费不足而缺少维护; 有的因为测试不全面导致系统稳定性差; 有的因为缺少规划而赶不上发展速度; 还有因为无法利用现有系统?#35797;矗?#26426;构小而没有内容支撑门户网站建设等原因.

作为企事业单位中的信息部门,面对系统扁平化、个性化需求的增加,导致系统定制化趋势越来越明显,信息部门除了创建数量庞大的系统来满足用户不断变化和增?#25317;?#38656;求之外,还有其他应?#28304;?#26045;吗? 大多数人都知道,传统网站架构往往是根据业务需求、现有团队等因素考虑设计,主要解决的是通用需求和当前业务,团队成员之间也相对了解,能快速完成一个个独立的信息系统. 但这样的系统设计与开发团队耦合性太紧密,一旦团队核心人员变动,往往会导致系统可扩展?#38498;?#31283;定性受到极大的影响,或一旦需求变化太大,系统就必须大规模重新设计才能满足需求. 在越来越依赖信息化的今天,需求快速变化是比较正常的,这就导致上述各种现象.

为了规避这些现象,信息部门必须具备以下的能力才能够应对挑战:

1) ?#20013;?#25552;高创新能力,使系统的技术含量越来越高,以满足客户需求;

2) 不断缩短系统研发时间,快速响应用户需求;

3) 不断强化成本控制能力,通过优化产品生命周期内的各种成本来控制系统总成本,取得投入产出比优势;

4) ?#20013;?#31283;定的质量改进能力.经验表明,设计信息系统一方面必须利用业务模块的批量化、标准化和通用化来缩短系统上线周期、降低研发成本、提高模块重用?#38498;?#31995;统稳定性,另一方面还要不?#31995;?#36827;行研发创新使系统越来越个性化,满足用户的定制需求. 这样,如何平衡系统的标准化、通用化与定制化、稳定性之间的矛盾,成为赢得竞争的关键因素.

基于这两方面的考虑,设计一套基于模块化的弹性扩展门户网站架构. 该设计把业务拆分为一个个模块,通过这些模块的组合可以向分支机构、下属单位、甚至岗位、人员提供相应的个性化门户系统,不仅解决了企事业单位整体的系统建设成本,而且也解决了门户网站内容不足、内容复用、组织机构之间信息交互等问题. 对软件开发团队来说,也解决了系统迭代的稳定性、模块之间的耦合度、用户需求的个性化、开发团队分工与协助等问题.

1 系统分析与建模

1. 1 架构需求

企业门户是一个联接企?#30340;?#37096;和外部的网站,它把各种应用系统、数据?#35797;础?#19994;务处理与企业各部门、分支机构等需求统一集成到门户之下,可以为企业提供一个单一的访问企业各?#20013;?#24687;?#35797;?#30340;入口,企业的员工、分支机构、合作伙伴等都可以通过这个门户获得个性化的信息和服务. 经过多次整理归纳,明确了企业及用户对架构的主要需求内容如下:

1) 企业门户统一入口地址,针对特定节假日有换肤功能,每个分支机构和部门有独立的门户,特定岗位和特定角色也有特定门户.

2) 企业门户、部门门户等内部常规门户必须包含总公司的公告、邮件、流程审批等模块.

3) 特定用户可能在多个部门任职,则该用户的门户可能是包含多部门信息的独立门户,也可能是采用切换的方式访问多个部门的门户.

4) 每个用户登录到门户首页,“第一眼?#26412;?#33021;看到自己当天的待办工作和关注信息.

5) 每个模块只开发一次,后期只是各模块单独升级,可以重复利用,不要重复开发.

6) 每个门户的关注点和?#24049;?#37117;不相同,但是相同模块在不同门户里的具体内容相同,?#24049;?#39029;面之间的切换不能改变用户的默认选择.

7) 每个模块相对独立,不能影响其他模块及整体系统的使用.

1. 2 系统选型

无架构,不系统,架构选型是门户系统成功的关键. 面对清晰的业务架构,而现有 OA系统和零散业务系统无法满足企业发展. 在考察过单体式应用架构、分布式架构、SOA 架构等架构后,最后集中在 OSGI 框架平台和自主研发基于模块化的弹性扩展门户网站架构的选择上.OSGi( open service gateway initiative) 技术是 Java 动态化模块化系统的一系列规范. 基于该规范,一些开源社区?#32479;?#21830;实现具体的 OSGI 开发平台,如 Java 开发的 Felix 和 Equinox,以及. NET 平台实现的OSGi. NET. 这些基于 OSGI 规范的架构,基本解决了软件复用、团?#26377;?#20316;、软件可维护性、开放性等问题.但是基于这些架构开发出来的产品,很难解决系统美观?#38498;?#21451;好性问题,以及用户个性化需求的问题.基于开源的 OSGI 架构平台思路,考虑到系统之间的集成和现有开发团队,最终选择自主研发基于模块化的弹性扩展门户网站架构.

1. 3 系统建模

在本企业门户中,业务参与者包括各部门、分支机构、分( 子) 公司的全体人员. 系统管理员指整个门户系统的管理者. 用例指各个业务场景,不同的业务场景可能由不同团队或人员独立开发.

2 定制首页设计

门户首页是门户的精华所在,是企事业单位的办公和精神集中地,往往用户记住和使用最多的是门户首页. 当用户看到首页,就知道门户是做什么,用户从这里得到哪些服务,获得哪些信息,?#20081;?#27493;用户将到哪里去,最终目的就是给用户带来极佳体验,并吸引足够多的注意力. 同样引导什么功能呢,用户进入门户首页不可能只停留在首页,他会根据自己的工作和目的来决定去点击链接. 而如何引导用户用最快的时间?#19994;?#33258;己想要做和去的地方,则是对门户设计、用户体验和引导的综合考量.

门户首页模块化设计的目的就是最大程度满足多样化用户需求,最大程度给每位用户带来极佳体验.网页的模块化?#25512;?#36710;生产是如出一辙,首先把一个页面的每一个部分按照内容的独立?#38498;?#20851;联性分成不同的模块,这样一个页面就由背景和很多个模块组成,?#32531;?#20877;将每个模块按照业务类别、外观样式等因素分配给不同的组员进行开发,并最终又将这些模块按用户所需拼合在一起,形成一个完整的门户首页. 最后,不同的首页模板根据相应配置文件渲染出个性化的首页.

4 模块开发

4. 1 总体开发思路 模块是构成门户的一部分,一般具有独立完整的功能,具有一致的前后端接口和加载方式,相同形态的模块在门户中可以相互替换,不同模块的按需组合就构成了最终个性化首页. 为什么要这样设计呢? 我们发现在一个项目里,需求提出者往往参照某一两个系统而提出,在这些系统页面中,都会存在内容和外观相同或相似的部分,如果我?#21069;?#29031;模块化来设计与开发,不同的业务已经变成了一个个的模块,那么这些相同业务或相?#24179;?#38754;的模块就可以分给同一个团队或个人来开发. 假如不同模块之间互不影响,或不同模块相互之间交互都有相应规范,那么不同开发团队可以同步进行开发,这样效率必将有很大的提高,且代码的质量和系统稳定性也会得到相应保证. 由于每个模块都是单?#26469;?#22312;的,所以当任何门户首页需要用到这个模块时,都可?#38498;?#20415;捷地直接将这个模块配置到首页使用,而不必再次重新开发,大大增强了模块复用性.怎样设计开发出这种具有通用性、互换性、相对独立性的模块呢? 在“后台配置设计”中已经了解模块呈现过程关系设计的基础上,再简要介绍模块的交互设计思路. 首先把模块类型分为: 列表自适应型、焦点图型、?#24049;?#26465;型、广告型. 其次在列表自适应型中,已经定义好模块自适应模框的样式和供前?#35828;?#29992;的常用方法,业务开发人员不在关注怎样适应模框、模块加载处理等共性问题,只需关注列表数据来源及列表对应二级、三级业务页面,而且在二级、三级等页面开发中,业务开发人员也只需关注页面内容,而页面?#24049;健?#39118;格等共性问题不需要花费精力. 同样,焦点图型的模块基类已经定义好适配模框方法和?#35745;?#20999;换方法,?#24049;?#26465;型基类已经处理好相同的页面在不同门户自动加载不同?#24049;?#26465;的方法; 只有广告型模块约束相对较少,适合模块扩展和特殊处理场景. 针对不同的业务版块,不同团队可以按照微服务的方式同步开发首页模块和相应二级、三级页面,也可以按照常规方式开发首页模块.

4. 2 基本实现思路

在了解上面设计思路后,下面以 3 个核心基类来说明主要实现思路. 3 个核心类分别是: 门户首页基类 BaseHomePage、门户首页模块基类其他二三级页面基类 BasePage. 门户首页基类除了当前主题、语?#38498;?#29992;户信息外,其中最重要的方法就是加载模块方法( LoadControls) ,在页面基类方法中已经实现了从缓存及配置文件中自动加载模块的方法,后期开发人员只需关注“定制首页设计”中的首页建模和特殊细节处理. 门户首页模块基类主要目的是提供标?#35745;?#21160;方法( On Start) 供首页通过反射的方?#38477;?#29992;,并把用户及配置信息传递给具体模块初始化使用; 在常规模块的开发中,模块开发人员只需考虑采用前端或后台的方?#20132;?#21462;后端数据并进行模块渲染,不再关心常规权限、换肤、日志等通用功能. 二三级页面基类虽然只提供了当前用户信息及配置信息供调用,但在页面前端提供了?#24049;健?#26679;式等动态生成内容和通用处理方法.?#26434;?#19994;务复杂、流量?#23433;?#21457;大的模块,团队成员可以考虑采用微服务的方式处理模块业务逻辑,为了交互方便,架构也提供了共享 session 和单点登?#25216;?#25104;方式. 在整个项目开发中,为了提高开发效率、系统稳定性、分工明确性. 为此,在本架构设计过程中,同步编写了“门户开发规?#37117;?#36807;程管控”的规范化文档,为开发?#23548;?#25171;下了?#24049;?#30340;基础.

4. 3 开发?#23548;?/p>

有了以上的设计和开发思路,在进行?#23548;?#24320;发过程中还需考虑基本规范、模块前端、模块后端及模块交互等系列问题. 基本规范包括那些呢? 首先,在按照不同业务进?#22411;?#38431;分工后,需要?#20048;?#19981;同开发团?#25317;?#21629;名冲突,否则可能导致模块加载失败; 其次,需要考虑不同模块的并发控制; 最后,还需考虑模块与系统间的集成.在?#23548;?#24320;发过程中,针对该架构制定了前端、后端及数据库开发规范. 在进行单个模块开发时,需要根据规划确定模块的简写,如系统模块简写是“SYS?#20445;?规定命名空间( java 叫包) 以模块简写单独结尾,这样在加载模块的时候就不会造成冲突. 同样,在前端的 css 样式文件和 javascript 脚本文件中也把不同模块的文件放在以模块简写的文件夹下面; 并且在脚本中涉及相同的函数名称添加模块前缀,在样式文件中涉及到样式文件采用模块简称的类限定,?#20048;?#26679;式文件冲突. 在数据库层面,除了基本数据库规范外,主要是在表名的前缀添加模块简写的方式区分和?#20048;?#19981;必要的冲突; 当然,根据模块流量和并非情况,不同模块数据可以放在同一数据库,也可以把单个模块存放在一个或多个独立数据库中.在模块前端开发过程中,除了遵守基本前端规范之外,本设计提炼出常用的前端模块样式和通用javascript 函数,如多种列表样式、?#35745;?#20999;换样式及相应的自适应样式等,当模块开发人员发现自己开发的模块存在对应模块样式时,只需按照前端文?#21040;?#34892;调用,减少前?#35828;?#35797;时间. 样式文件、脚本及?#35745;?#31561;静态文件按照规范统一放在主题包文件夹下面,整个主题包可以单独部署在单独二?#38431;?#21517;下的服务器上,也可以部署在网站的子目录下. 当配置文件配置为相对路径时,则模块前端和后?#35828;?#29992;相对路?#26029;?#30340;静态文件; 同理,配置为二?#38431;?#21517;时,前后端则自动调用独立服务器下的静态?#35797;矗?#22312;模块后端开发过程中,我们推荐采用模块后台代码轻量化方式,结合微服务处理后端业务逻辑方式. 当然没有后台业务代码逻辑,或把简单业务逻辑直?#26377;?#22312;后台也是可以正?#26041;?#34892;模块渲染. 主要是根据模块业务复?#26377;院?#27169;块并发大小来综合考虑是否在后端采用微服务方式处理业务逻辑,是否提供统一的 API 供模块后台调用,以及后端数据库是否分库和集群等方式. 在模块与各系统交互过程中,如果是自主开发的系统,推荐采用 Session 共享集成方式,否则推荐采用单点登?#25216;?#25104;方式.

5 总结

本文中针对模块在门户网站中的设计研究,提出基于模块化的弹性扩展门户网站架构设计,并将该架构设计在华夏航空企业门户中进行应用. 3 年的?#23548;?#24212;用表明确实解决了用户需求个性化、团队分工、开发效率、系统扩展?#38498;?#31283;定性等关键问题. 本设计只是软件模块化在具体行业中的一次成功应用思路分享,软件模块化的目的是建立可重用的软件组件,在不需要修改或仅作少量修改的情况下,可再次用来组建新的软件系统,提高软件的开发周期和可靠性. 模块化的弹性扩展框架设计可以在保持系统较高通用性的同时提供产品的多样化配置,因此基于模块化的弹性扩展是解决定制设计和批量化开发这对矛盾的一条出路,是企事业单位门户开发设计的一条出路.