二次開髮指南

来源:http://www.cnblogs.com/xiaoxiaojia/archive/2016/04/06/5360239.html
-Advertisement-
Play Games

1 引言 相關源碼下載地址:http://www.jinhusns.com/Products/Download/?type=xcj 1.1 目的 用於社會化開發平臺的架構設計指導,闡述基礎設施及關鍵技術構件、業務構件的設計思想及具體實現。 讀者包括但不限於社會化開發平臺的研發人員,使用社會化開發平臺 ...


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 設計要點

 應用設計整體設想.png

圖表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)。

平臺+應用視圖.jpg

圖表2平臺+應用詳細視圖

3       應用開髮指導

3.1     開發流程概覽

開發流程概覽.jpg

3.2     建立應用的目錄結構

3.2.1 手動建立

您可以手動的建立您的應用目錄結構:

  1. 在Web/Applications/建立以應用的ApplicationKey命名的Web Application;

  2. 在Web/Applications/{ApplicationKey}/建議包含以下目錄結構:

 應用模板目錄結構.png

圖表1應用模塊目錄結構

3.2.2 自動建立

您還可以使用我們提供的AppHelper程式來自動生成目錄結構。點擊附件進行下載:

TunynetTool.AppHelper.zip36.58K下載次數:715

 AppHelper.png

圖表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;

 Application.png

圖表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. 音樂網站解析,與視頻網站解析類似。


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 前些天把四大組件之一的Service扯了一遍,今天就要開始談談它的弟兄BroadcastReceiver了。寫到這裡我挺糾結的,因為廣播接收者確實比較簡單,但是各位就不要以為簡單的就不內涵,也許我們慢慢探討一下還能有另外一片天地。 慣例還是先會介紹一下基礎的知識,後面會說說關於BroadcastRe ...
  • 樣式: layout: popup_appinfo.xml anim: popup_enter.xml popup_exit.xml code: Activity.java ...... ...... 1 //彈窗消失 2 mPopupWindow.dismiss(); ...... ...
  • 雖然現在各種圖形化管理工具方便了MySQL的管理,但是偶爾還是需要手動輸入指令來使用比較方便,以下是摘抄的一些命令,供自己備忘使用。 1、顯示資料庫列表。 show databases; 2、顯示庫中的數據表: use mysql;show tables; 3、顯示數據表的結構: describe ...
  • 1、自頂向下查找 2、自底向上查找 ...
  • 我相信經常有同學想刪除某一個表時,遇到這樣或那樣的約束無法刪除一頭霧水,這時您請不要著急,先看看以下提供的刪除所有約束、表、視圖等SQL腳本,或在測試環境試用。但是您也可以僅刪除某一個對象(表)的所有約束或全部約束,您只需要把游標里用到的SELECT查詢語句單獨拿出來執行一下,自己看看就明白了,刪除 ...
  • 在保密你的伺服器和數據,防備當前複雜的攻擊,SQL Server有你需要的一切。但在你能有效使用這些安全功能前,你需要理解你面對的威脅和一些基本的安全概念。這篇文章提供了基礎,因此你可以對SQL Server里的安全功能充分利用,不用在面對特定威脅,不能保護你數據的功能上浪費時間。 從讓人眼花繚亂的 ...
  • 介紹 grep是一個功能強大的文本搜索命令,可以用它來搜索某個文件中是否包含指定的搜索內容,它可以利用正則表達式來做複雜的篩選操作,它還可以為其它命令傳輸給管道的篩選,比如我們常用到的分析單個進程的操作就是會利用它“ps -ef|grep command”。 語法 grep [OPTION]... ...
  • 一、關於CentOS系統介紹 CentOS(Community Enterprise Operating System,中文意思是:社區企業操作系統)是Linux發行版之一,它是來自於Red Hat Enterprise Linux依照開放源代碼規定釋出的源代碼所編譯而成。基於Red Hat持續升級 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...