Rainbow Portal架构的详细介绍

Rainbow Portal架构的详细介绍

更多内容参见 Rainbow 学习

1.Portal架构

  • 一个Rainbow站点集合可以包括多个web站点
    多个站点能使用同一代码同一个数据库;所有的Portal共用一个web.config文件。但每个Portal都有单独的目录来保存上传的图片和文件。
  • Rainbow站点由多个页面(Page)构成
    页面分层管理,层次理论上是无限的,页面间的导航通过菜单实现。Rainbow内置许多不同类型的菜单,包括传统的下拉式菜单,Tabs等等。当然也可以使用自定义的菜单。每个页面根据是否有权限可以显示或隐藏。每个页面都通过动态加载用户控件生成的。
  • Rainbow页面有模块(module)构成
    每个模块通常提供某种类型的功能,如电子商务、讨论、文章等。Rainbow内置70多个模块。用户可以对每个模块进行单独授权,查看、编辑、增加、或是删除模块的内容。模块可以很方便的从一个页面移动到另外的页面。
    2.架构的实现
    2.1 .数据库结构
    让我们从数据库表结构开始,来分析架构是如何实现的。
    Rainbow Portal架构的详细介绍 如图。图中只是和架构有关的部分数据库表。
    Rainbow在一系列有层次的表中保存Portal的结构。
    最上面的表是Portal,每个Portal都有独特的设计和自定义属性,以键/值的形式保存在rb_PortalSettings表中。
    每个Portal都包含页面,这些页面的构成类似树状结构,每个页面的自定义属性以键/值的形式保存在rb_TabSettings表中。
    页面包含模块;每个模块都有特定的功能。GeneralModuleDefinitions表中,包含所有的模块。模块可以用在特定的Portal中,其信息保存在ModuleDefinitions表中。Module表中保存模块实例,其权限也保存在表中。每个模块的自定义属性以键/值的形式保存在rb_ ModuleSettings表中。
    对数据库表的操作通过存储过程来实现的。
    2.2 .程序实现
    Portal的有关设置信息通过PortalSettings 类来处理。
    Portal的信息包括:
  • Portal ID
  • Portal 名称
  • 页面集合
  • Portal的自定义设置
  • 当前页面和其自定义设置
  • Portal和网站的一些属性
  • 当前采用的主题和页面布置
    在每个Web请求的时候,PortalSettings类实例都被更新,并保存在Context上下文中。在Global.asax.cs的Application_BeginRequest事件中,生成PortalSettings类实例:settings = new PortalSettings(pageId, portalAlias),参数pageId是当前的页面,portalAlias是Portal的别名。
    PortalSettings类实例保存在Context中,可以在应用程序任何地方使用,包括页面、组件、自定义控件等等。
    Portal页面保存在PortalSettings实例的公共属性中:DesktopTabs和MobileTabs中(以ArrayList的形式保存),每个页面的属性保存在TabStripDetails实例中。可以通过Context上下文的PortalSettings来获取页面集合。
    页面导航由Rainbow的页面布局来处理,通常在DesktopPortalBanner.ascx用户控件中,通过DesktopNavigation 和 MenuNavigation控件显示。DesktopNavigation 和 MenuNavigation控件遍历页面集合,检测当前的用户是否有权查看页面,如果有权限就增加到另外一个要绑定到DataList的集合中。
    当用户点击页面链接时,PortalSettings实例更新,设置当前页面。当DesktopPortalBanner.ascx加载的时候,DataList中的SelectedIndex属性设为当前页面的索引。
    前面讲的都是框架,Portal模块包含的才是Rainbow Portal的实际内容,每个模块处理一个特定的内容。所有的模块都是从PortalModuleControl基类中继承的,PortalModuleControl提供了模块和框架之间一些必需的通讯。