二次开发指南

1       引言

相关源码下载地址:http://www.jinhusns.com/Products/Download/?type=xcj

1.1     目的

用于社会化开发平台的架构设计指导,阐述基础设施及关键技术构件、业务构件的设计思想及具体实现。

读者包括但不限于社会化开发平台的研发人员,使用社会化开发平台的产品定制人员以及公司外部的二次开发者。

1.2     参考资料

《架构使用说明书》

《业务使用说明书》

《皮肤设计机制》

1.3     引用术语与缩写解释


缩写、术语


解释


多租户模式


产品中存在诸多业务逻辑相同但是使用者数据需要相互隔离的服务(可能是业务构件也可能是应用),采用多租户模式可以使这类服务获得重用,从而简化开发。租户类型是指一类租户(例如:群组),租户是指租户类型的一个特定实例(例如:群组A)。

2       “平台+应用”设计思想

2.1     设计思想

2.1.1 目的

  1. 开发架构清晰,易于维护;
  2. 提升开发效率;
  3. 提升产品的可扩展性;
  4. 什么是应用?

2.1.2 概念

应用指产品中的功能模块,具有以下特征:

1)         具有一定独立性的完整的功能模块;

2)         可以在产品中安装、卸载、禁用/启用;

3)         可以在呈现区域安装、卸载(如果允许在呈现区域安装);

4)         应用可以设置为锁定状态,锁定的应用不允许卸载(可以禁用);

  1. 什么是呈现区域?

呈现区域之间彼此隔离,具有独立性,可以有独立的皮肤设计规约及导航,皮肤都是针对呈现区域进行设计的,呈现区域可以看作多个应用数据的容器。频道、用户空间、群组空间、后台,都是呈现区域,都可以定义自己的皮肤及导航。

  1. 什么是呈现区域实例?

是指呈现区域在运行期间生成的一个具体可以使用的实例,呈现区域分为单例和多例,每个呈现区域实例都有自己的Owner。例如:

1)         频道、后台属于单例:Owner=0;

2)         用户空间、群组空间属于多例:Owner为UserId或GroupId;

  1. 应用与呈现区域的关系

1)         1个应用可以在多个呈现区域中使用,可以为不同的呈现区域提供数据;

2)         1个呈现区域下,可以有多个应用,为应用数据提供统一的导航及皮肤设计;

2.1.3 设计要点

图表1应用设计整体设想

  1. 应用应该保持独立性:

1)         应用设计在物理上、逻辑上尽量独立;

2)         尽量避免应用之间的依赖;

  1. 应用的设计主要包括两部分的内容,一部分是数据另一部分是如何呈现;
  2. 应用的数据部分支持多租户,租户可以是呈现区域(PersentArea)也可以是另一个应用。

2.1.3.1    数据部分

在数据库设计方面采用最简单的方式,在应用数据表中增加TenantTypeId(存储对应的PersentAreaKey或ApplicationId)。

2.1.3.2    呈现部分

按 照当前的皮肤设计机制,应用的View仅有一份(在所有皮肤中共用),而导航等UI元素的风格又经常会在不同皮肤中进行调整,因此必须把这一部分UI元素 交由平台部分进行设计,各应用仅对外公布呈现这部分UI元素的数据。基于这个原因,需要抽象出来的UI元素包括:导航、管理菜单、快捷操作,这几个UI元 素在不同的呈现区域各不相同因此应该重新设计。

2.2     设计实施

2.2.1 设计规则

  1. 应用可以由开发者设置为锁定状态,锁定状态的应用不允许删除(可以禁用);
  2. 应用在呈现区域可以设置为内置应用:

1)         内置应用不允许卸载;

2)         内置应用属于自动安装应用(无论自动安装属性设置何值);

  1. 应用在呈现区域可以设置为自动安装:创建呈现区域实例时,自动安装到该呈现区域中;
  2. 在站点安装/卸载(目前仅考虑手动进行安装/卸载)时需要添加/移除以下数据:

2.2.2 安装/卸载

1)         tn_Applications:应用表;

2)         tn_ApplicationInPresentAreaSettings:应用在呈现区域的设置;

3)         tn_InitialNavigations:应用在呈现区域的初始化导航;

4)         tn_ApplicationManagementOperations:应用在呈现区域的管理操作;

  1. 在呈现区域安装/卸载(由呈现区域实例Owner在管理界面执行)时需要添加/移除以下数据:

1)         tn_ApplicationInPresentAreaInstallations:应用在呈现区域的安装记录;

2)         tn_PresentAreaNavigations:呈现区域实例的导航数据;

3)         应用数据中与该呈现区域实例相关的数据(卸载时需要考虑);

  1. 在其他应用安装/卸载:

1)         当前底层设计支持一个应用安装在另一个应用中;

2)         由开发者自行完成;

2.2.3 平台支撑

为了最大限度提升应用的开发效率,把应用开发常用的代码封装成可重用的技术构件(Infrastructure)和业务构件(BusinessComponents)。

图表2平台+应用详细视图

3       应用开发指导

3.1     开发流程概览

3.2     建立应用的目录结构

3.2.1 手动建立

您可以手动的建立您的应用目录结构:

  1. 在Web/Applications/建立以应用的ApplicationKey命名的Web Application;
  2. 在Web/Applications/{ApplicationKey}/建议包含以下目录结构:

图表1应用模块目录结构

3.2.2 自动建立

您还可以使用我们提供的AppHelper程序来自动生成目录结构。点击附件进行下载:

TunynetTool.AppHelper.zip36.58K下载次数:715

图表2 AppHelper

3.3     开发必需的程序代码

  1. 从ApplicationBase派生自己的Application类,必须实现以下方法:

方法名称


成员修饰


说明


备注


Install(string presentAreaKey, long ownerId):bool


internal protected


为呈现区域实例安装应用


UnInstall(string presentAreaKey, long ownerId):bool


internal protected


为呈现区域实例卸载应用


DeleteUser(long userId, string reassignContentToUserName = null):void


internal protected


删除用户在应用中的数据

  1. 从ApplicationConfig派生自己的应用配置类,必须重写以下属性:

属性名称


成员修饰


说明


备注


ApplicationId : int


public


该应用的ApplicationId


ApplicationKey : string


public


该应用的ApplicationKey

  1. 定义UrlRoutingRegistration.cs

1)         从System.Web.Mvc.AreaRegistration派生;

2)         使用ApplicationKey作为AreaName;

  1. 如果需要则创建Application.config;

图表3开发应用需要实现的抽象类

3.4     配置应用

  1. 创建应用(涉及到tn_Applications表)

字段名称


字段描述


日志应用配置示例


ApplicationId


应用Id

要求全局唯一,第三方应用建议从3001开始


1002


ApplicationKey


Application英文唯一标识


Blog


Description


应用描述


N’’


IsEnabled


是否启用

不启用的应用,在前台各呈现区域中,不会显示


1


IsLocked


是否锁定

目前版本暂时用不到


0

  1. 分析应用和呈现区域(涉及到tn_ApplicationInPresentAreaSettings表)

分析该应用可能会在那些呈现区域中使用,是否允许用户安装或卸载,是否为用户自动安装应用,是否会产生数据。具体配置说明如下:


字段名称


字段描述


ApplicationId


应用Id


PresentAreaKey


呈现区域标识


IsBuiltIn


是否为呈现区域内置应用

内置应用会默认创建,并且不允许卸载


IsAutoInstall


是否在呈现区域自动安装


IsGenerateData


应用在该呈现区域是否产生数据

日志配置示例如下:


tn_ApplicationInPresentAreaSettings


ApplicationId


PresentAreaKey


IsBuiltIn


IsAutoInstall


IsGenerateData


1002


N‘Channel‘


0


1


0


1002


N‘UserSpace‘


0


1


1

  1. 导航

分析应用在各个呈现区域会有哪些导航,导航的链接地址、图标会是什么,是否在新窗打开,具体配置说明如下:


字段名称


字段描述


NavigationId


定义规则:[呈现区域Id:2位][应用Id:4位][ 顺序号:N位]

呈现区域Id包括:10(频道)、11(用户空间)、13(群组空间)、20(后台);

应用ID若不足四位,请用零左补齐;必须唯一;


ParentNavigationId


父导航Id

一级导航,请填写0;


Depth


深度(从上到下以0开始)


PresentAreaKey


呈现区域标识

可选值:N‘Channel‘(频道)、N‘UserSpace‘(用户空间)、N‘GroupSpace‘(群组空间)、N‘ControlPanel‘(后台)


ApplicationId


应用Id


NavigationType


导航类型

可选值:0(来源于Application)、1(呈现区域初始化的导航)、2(呈现区域Owner新增的导航)

应用初始化数据中,请填写0


NavigationText


导航文字


ResourceName


导航文字资源名称(如果同时设置NavigationText则以NavigationText优先)

此项比配置导航文字的优势之处在于,方便实现国际化


NavigationUrl


导航url,如果是来源于应用,并且该字段为空,则根据UrlRouteName获取

通过后台添加外链时,可使用此项


UrlRouteName


应用导航路由规则名称将会根据该规则名称获取应用导航地址

在应用初始化数据中,请使用UrlRouteName获取导航地址


RouteDataName


路由数据名称

使用UrlRouteName字段时,此项才有效


IconName


系统内置图标名称


ImageUrl


菜单文字旁边的图标url(预留字段,暂时用不到)


NavigationTarget


是新开窗口还是在当前窗口(默认:_self)


DisplayOrder


排序序号

建议和导航Id保持一致


OnlyOwnerVisible


是否仅拥有者可见


IsLocked


是否锁定

  1. 处于锁定状态的导航不允许删除;
  2. 处于锁定状态的导航仅允许修改以下内容:NavigationText、NavigationTarget、ImageUrl、DisplayOrder、IsEnabled;

IsEnabled


是否启用

日志配置示例如下:


tn_InitialNavigations


字段名称


频道日志

一级导航示例


频道日志

二级导航示例


频道日志

二级导航示例2


用户空间日志

一级导航示例


用户空间日志

二级导航示例


后台日志

导航示例


NavigationId


10100201


10100202


10100203


11100201


11100202


20100201


ParentNavigationId


0


10100201


10100201


0


11100201


20000011


Depth


0


1


1


0


1


2


PresentAreaKey


N‘Channel‘


N‘Channel‘


N‘Channel‘


N‘UserSpace‘


N‘UserSpace‘


N‘ControlPanel‘


ApplicationId


1002


1002


1002


1002


1002


1002


NavigationType


0


0


0


0


0


0


NavigationText


N‘日志‘


N‘日志首页‘


N‘我的日志‘


N‘日志‘


N‘日志首页‘


N‘日志‘


ResourceName


N‘‘


N‘‘


N‘‘


N‘‘


N‘‘


N‘‘


NavigationUrl


N‘‘


N‘‘


N‘‘


N‘‘


N‘‘


N‘‘


UrlRouteName


N‘Channel_Blog_Home‘


N‘Channel_Blog_Home‘


N‘UserSpace_Blog_Blog‘


N‘UserSpace_Blog_Home‘


N‘UserSpace_Blog_Home‘


N‘ControlPanel_Blog_Home‘


RouteDataName


NULL


NULL


N‘spaceKey‘


NULL


NULL


NULL


IconName


N‘Blog‘


NULL


NULL


N‘Blog‘


NULL


NULL


ImageUrl


NULL


NULL


NULL


NULL


NULL


NULL


NavigationTarget


N‘_self‘


N‘_self‘


N‘_self‘


N‘_self‘


N‘_self‘


N‘_self‘


DisplayOrder


10100201


10100202


10100203


11100202


11100202


20100201


OnlyOwnerVisible


0


0


0


1


1


0


IsLocked


0


0


0


0


0


0


IsEnabled


1


1


1


1


1


1

  1. 管理操作

字段名称


字段描述


OperationId


定义规则:[呈现区域Id:2位][应用Id:4位][ 顺序号:N位]

呈现区域Id包括:10(频道)、11(用户空间)、13(群组空间)、20(后台);

应用ID若不足四位,请用零左补齐;必须唯一;


ApplicationId


应用Id


AssociatedNavigationId


关联的导航Id(适用于显示在主导航旁边的快捷操作,例如我的首页左侧的相册导航,可以在其旁边再加一个“上传”快捷操作)


PresentAreaKey


呈现区域标识


OperationType


管理操作类型

可选值:1(快捷操作)、2(管理菜单)


OperationText


操作的文字


ResourceName


操作文字资源名称(如果同时设置OperationText则以OperationText优先)


NavigationUrl


导航url


UrlRouteName


导航路由规则名称


RouteDataName


路由数据名称


IconName


系统内置图标名称


ImageUrl


菜单文字旁边的图标url(预留字段,暂时用不到)


NavigationTarget


是新开窗口还是在当前窗口(默认:_self)


DisplayOrder


排序序号


OnlyOwnerVisible


是否仅拥有者可见


IsLocked


是否锁定

  1. 处于锁定状态的管理操作不允许删除;
  2. 处于锁定状态的管理操作仅允许修改以下内容:OperationText、NavigationTarget、ImageUrl、DisplayOrder、IsEnabled;

IsEnabled


是否启用

日志配置示例如下:


字段名称


频道日志

一级导航示例


频道日志

二级导航示例


OperationId


10100201


11100201


ApplicationId


1002


1002


AssociatedNavigationId


0


0


PresentAreaKey


N‘Channel‘


N‘UserSpace‘


OperationType


1


1


OperationText


N‘撰写日志‘


N‘撰写日志‘


ResourceName


N‘‘


N‘‘


NavigationUrl


N‘‘


N‘‘


UrlRouteName


N‘UserSpace_Blog_Create‘


N‘UserSpace_Blog_Create‘


RouteDataName


N‘spaceKey‘


NULL


IconName


N‘Write‘


N‘Write‘


ImageUrl


NULL


N‘‘


NavigationTarget


N‘_blank‘


N‘_self‘


DisplayOrder


10100202


11100201


OnlyOwnerVisible


1


1


IsLocked


0


1


IsEnabled


1


1

3.5     开发必须的SQL脚本

  • 安装脚本:需要考虑以下表的初始化数据:

1)         tn_Applications:应用表;

2)         tn_ApplicationInPresentAreaSettings:应用在呈现区域的设置;

3)         tn_InitialNavigations:应用在呈现区域的初始化导航;

4)         tn_ApplicationManagementOperations:应用在呈现区域的管理操作;

  • 卸载脚本:

1)         清除安装时添加的数据;

2)         tn_ApplicationStatisticalData:应用统计数据;

3)         tn_PresentAreaNavigations:应用在呈现区域的导航数据;

4)         以及应用自身的数据;

  • 升级脚本:由开发者根据应用情况自行设计;

4       高级应用

4.1     界面融合

要达到和现有皮肤整体风格保持一致,应用页面就需要使用预置的布局,具体说明如下:

a)         频道布局包括:app-1col.cshtml(通栏布局)、app-home-2cols.cshtml(应用首页两栏布局)、app-home- 3cols.cshtml(应用首页三栏布局)、app-list-2cols.cshtml(应用列表两栏布局)、app-detail- 2cols.cshtml(应用详情两栏布局)、app-form-2cols.cshtml(应用表单两栏布局);

b)         群组布局包括:app-1col.cshtml(通栏布局)、app-list-2cols.cshtml(应用列表两栏布局)、app-detail- 2cols.cshtml(应用详情两栏布局)、app-form-2cols.cshtml(应用表单两栏布局)、app-outer-home- 2cols.cshtml(对外显示时,应用首页两栏布局);

c)         用户空间布局包括:app-1col.cshtml(通栏布局)、app-list-2cols.cshtml(应用列表两栏布局)、app- detail-2cols.cshtml(应用详情两栏布局)、app-form-2cols.cshtml(应用表单两栏布局)、app-outer- home-2cols.cshtml(对外显示时,应用首页两栏布局);

4.2     使用业务构件与平台深度开发

常用到的业务构件有:审核、动态、通知、积分、权限,具体请参见《业务构件使用说明书》

4.3     扩展新视频、音乐网站解析插件

  1. 视频网站解析插件:

a)         在~/Plugins/MediaParsers/Video/目录下,创建View文件,并以视频网站的域名关键词(保证域名中包含该关键词,并与其它视频网站解析插件名不同即可)命名;

b)         编辑View文件,实现以下逻辑:

i.              匹配该视频网站的视频详细页面地址,匹配成功则继续以下操作;

ii.              抓取页面内容,分析出视频名称、视频播放地址、视频缩略图、视频描述,并构建ParsedMedia实体,保存至数据库;

iii.              输出ParsedMedia实体的Json格式。

  1. 音乐网站解析,与视频网站解析类似。
时间: 2024-10-05 05:32:27

二次开发指南的相关文章

[PC]PHPCMS二次开发指南(上)

------------------------------------------------------------------------------------- PHPCMS本身功能已经很完善,自带的模块可用可不用,松耦合特性使其非常适合企业的二次开发. PC的默认路由在 phpcms/caches/configs/route.php 中定义,为content模块下index控制器的init方法 一. PC所有模块都在module目录下,与数据表名字相同: module目录中文件就是控

ECMALL模板解析机制.MVC架构分析及文件目录说明.二次开发指南手册(转)

ECMALL模板解析语法与机制 http://www.nowamagic.net/architecture/archt_TemplateSyntaxAndAnalysis.php ECMALL模块开发指南 http://wenku.baidu.com/view/785b8a1ea76e58fafab003a6.html ECMall 结构图 http://wenku.baidu.com/view/3e9d9921bcd126fff7050b10.html ECMall 数据库表结构 全面讲解 h

开发指南专题二:JEECG微云高速开发平台JEECG框架初探

开发指南专题二:JEECG微云高速开发平台JEECG框架初探 2.JEECG框架初探 2.1演示系统 打开浏览器输入JEECG演示环境界址:http://demo.jeecg.org:8090/能够看到如图21所看到的的登录界面., 图21演示系统登录界面 点击[登陆]button,进入演示系统的主界面,如图22所看到的. 图22演示系统主界面 在JEECG演示系统中的功能模块包含系统管理.流程管理.业务申请.业务办理.经常使用功能演示等.当中,用户管理.流程设计器的界面截图如图23和图24所看

Civil 3D API二次开发学习指南

Civil 3D构建于AutoCAD 和 Map 3D之上,在学习Civil 3D API二次开发之前,您至少需要了解AutoCAD API的二次开发,你可以参考AutoCAD .NET API二次开发学习指南.另外,如果你用到Map 3D相关的功能,你还可能需要Map 3D的开发知识,看Map 3D API二次开发学习指南. 软件准备及开发环境 AutoCAD Civil 3D 软件,推荐2014以上版本,你可以从Autodesk 官方网站下载试用版, Visual Studio 2012 或

开发指南专题二:JEECG微云快速开发平台JEECG框架初探

开发指南专题二:JEECG微云快速开发平台JEECG框架初探 2.JEECG框架初探 2.1演示系统 打开浏览器输入JEECG演示环境地址:http://demo.jeecg.org:8090/可以看到如图21所示的登录界面., 图21演示系统登录界面 点击[登陆]按钮,进入演示系统的主界面,如图22所示. 图22演示系统主界面 在JEECG演示系统中的功能模块包括系统管理.流程管理.业务申请.业务办理.常用功能演示等.其中,用户管理.流程设计器的界面截图如图23和图24所示. 图2

七日Python之路--第十二天(Django Web 开发指南)

<Django Web 开发指南>.貌似使用Django1.0版本,基本内容差不多,细读无妨.地址:http://www.jb51.net/books/76079.html (一)第一部分 入门 (1)内置数字工厂函数 int(12.34)会创建一个新的值为12的整数对象,而float(12)则会返回12.0. (2)其他序列操作符 连接(+),复制(*),以及检查是否是成员(in, not in) '**'.join('**')   或  '***%s***%d' % (str, int)

开发指南专题八:JEECG微云快速开发平台数据字典

   开发指南专题八:JEECG微云快速开发平台数据字典的使用 1.标签中使用数据字典 数据字典为系统中可能用到的字典类型数据提供了使用的便利性和可维护性.以下拉框标签<t:dictSelect>为例进行讲解 1.1. 标签参数 属性名 类型 描述 是否必须 默认值 typeGroupCode string 字典分组编码 是 null field string 对应表单 是 null id string 唯一标识 否 null title string 显示文本 否 null defaul

微信公众平台搭建与开发(二)开发模式的搭建和关键词回复

在第一部分介绍了编辑模式,但是编辑模式有较大局限性,下面主要开始介绍开发模式,这一部门先简单介绍下开发模式的环境搭建和关键词回复. 开发模式首先要有一个虚拟主机,本人使用的是新浪开发者平台的虚拟主机,使用云豆计算流量,若成为新浪开发者用户基本上就可以免费使用了,本人注册用户所赠送的云豆不知道能用多久.当然国内比较大还有就是百度开发者平台,注册后发现部署还没有新浪的方便,并且在BAE3.0以后好像也是要收费的.有兴趣的朋友可以研究下google的开发者平台,不知道是否要收费. 在注册新浪开发者平台

curl网站开发指南

curl网站开发指南 作者: 阮一峰 日期: 2011年9月 4日 我一向以为,curl只是一个编程用的函数库. 最近才发现,这个命令本身,就是一个无比有用的网站开发工具,请看我整理的它的用法. =================================== 阮一峰 整理 curl是一种命令行工具,作用是发出网络请求,然后得到和提取数据,显示在"标准输出"(stdout)上面. 它支持多种协议,下面举例讲解如何将它用于网站开发. 一.查看网页源码 直接在curl命令后加上网址,