分享一款基于asp.net mvc框架开发的社区产品--近乎。目前可以在官网免费下载,下载地址:http://www.jinhusns.com/Products/Download?type=whp

1       引言

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程序来自动生成目录结构。点击附件进行下载:[attach:2818]

图表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. 音乐网站解析,与视频网站解析类似。

4.4     使用ORM、缓存快速开发数据访问

参见《架构使用说明书》4.1之前版本[attach:2818]4.2版本[attach:5180]

asp.net mvc开发的社区产品相关开发文档分享的更多相关文章

  1. ASP.NET MVC开发:Web项目开发必备知识点

    最近加班加点完成一个Web项目,使用Asp.net MVC开发.很久以前接触的Asp.net开发还是Aspx形式,什么Razor引擎,什么MVC还是这次开发才明白,可以算是新手. 对新手而言,那进行A ...

  2. 解析ASP.NET Mvc开发之删除修改数据

    目录: 1)从明源动力到创新工场这一路走来 2)解析ASP.NET WebForm和Mvc开发的区别 3)解析ASP.NET Mvc开发之查询数据实例 4)解析ASP.NET Mvc开发之EF延迟加载 ...

  3. 基于C#和Asp.NET MVC开发GPS部标视频监控平台

    基于C#和Asp.NET MVC开发GPS部标监控平台 目前整理了基于.NET技术的部标平台开发文章,可以参考: 1.部标Jt808协议模拟终端的设计和开发 2.C#版的808GPS服务器开发-> ...

  4. iOS开发-开发文档安装

    iOS开发肯定离不开开发文档,苹果有在线帮助文档,xCode其实可以下载模拟器文档和iOS8.1文档的,不过下载的速度实在不敢恭维,而且比较头疼的是不显示下载进度条的,苹果的开发文档都是放在)/应用程 ...

  5. ASP.Net MVC开发基础学习笔记:一、走向MVC模式

    一.ASP.Net的两种开发模式 1.1 ASP.Net WebForm的开发模式 (1)处理流程 在传统的WebForm模式下,我们请求一个例如http://www.aspnetmvc.com/bl ...

  6. ASP.Net MVC开发基础学习笔记(1):走向MVC模式

    一.ASP.Net的两种开发模式 1.1 ASP.Net WebForm的开发模式 (1)处理流程 在传统的WebForm模式下,我们请求一个例如http://www.aspnetmvc.com/bl ...

  7. ASP.NET MVC开发基础

    一.ASP.Net MVC的开发模式 (1)处理流程 在ASP.Net MVC中,客户端所请求的URL是被映射到相应的Controller去,然后由Controller来处理业务逻辑,或许要从Mode ...

  8. ASP.Net MVC开发基础学习笔记:四、校验、AJAX与过滤器

    一.校验 — 表单不是你想提想提就能提 1.1 DataAnnotations(数据注解) 位于 System.ComponentModel.DataAnnotations 命名空间中的特性指定对数据 ...

  9. ASP.Net MVC开发基础学习笔记:五、区域、模板页与WebAPI初步

    一.区域—麻雀虽小,五脏俱全的迷你MVC项目 1.1 Area的兴起 为了方便大规模网站中的管理大量文件,在ASP.NET MVC 2.0版本中引入了一个新概念—区域(Area). 在项目上右击创建新 ...

随机推荐

  1. Spring Data JPA教程, 第七部分: Pagination(未翻译)

    The previous part of my Spring Data JPA tutorialdescribed how you can sort query results with Spring ...

  2. 菜鸟学习 git

    到新公司学习和使用 git 有一段时间了.不得不说 git 真的很牛逼,当然,git 的牛逼是建立在 Linux 之父的牛逼的基础上的. 首先跪着推荐 git 学习网站:http://www.liao ...

  3. MEF 编程指南(二):定义可组合部件和契约

    可组合部件(Composable Parts)   在 MEF 内部可组合部件是一个可组合单元.可组合部件导出其他可组合部件需要的服务,并且从其他可组合部件导入服务.在 MEF 编程模型中,可组合部件 ...

  4. Codeforces Round #328 (Div. 2) A. PawnChess 暴力

    A. PawnChess Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/contest/592/problem/ ...

  5. mongo批量更新

    update的如果要批量更新是无能为力的,如果有多条匹配的结果,但结果是只能更新一条. 用bulk来进行处理 var bulk = db.HIS_ALARM.initializeUnorderedBu ...

  6. Ubuntu开机时出现"没有正确安装GNOME电源管理器的默认配置

    1:在登录界面.按Ctrl+Alt+F1,进入控制台命令行模式 2:先输入username,回车,然后输入password,登录成功 3:输入df -h,这个命令是查看硬盘空间的.能够看一下.你的ho ...

  7. Windows 10正式版官方原版ISO镜像下载

    [微软官方]下载地址1:官方下载工具(32-位系统版本)官方下载工具(64-位系统版本) [MSDN]下载地址2:cn_windows_10_multiple_editions_x64_dvd_684 ...

  8. Scala Error: error while loading Suite, Scala signature Suite has wrong version expected: 5.0 found: 4.1 in Suite.class

    准备给scala项目引入单元测试 <dependency> <groupId>org.scalatest</groupId> <artifactId>s ...

  9. UITableViewCell高度自适应探索--AutoLayout结合Frame

    UITableViewCell高度自适应探索--UITableView+FDTemplateLayoutCell地址: http://www.jianshu.com/p/7839e3a273a6UIT ...

  10. How to update FVDI Commander driver to latest V2015.6.2

    As FVDI Commander products are upgraded to new versions, I often receive emails from customers askin ...