1. 程式人生 > >架構設計分享之許可權系統(看圖說話)

架構設計分享之許可權系統(看圖說話)

前面一篇文章《最近架構隨想》,我提到架構設計的一些構想,其實也是對之前專案經驗的一些歸納及總結。今天我們就以許可權系統作為切入點,談一談怎麼設計許可權系統以及怎麼做到系統具有以下特性:

  1. Organized:如果系統組織比較好,可以起到事半功倍的效果。
  2. Encapsulated:對功能,結構,資料進行有效的封裝,會使系統維護變得更加容易。
  3. Reusable:對常用功能以及元件進行有效的封裝,可以使系統變得結構清晰且方便維護。
  4. Extensible:在設計系統的時候,如果很好的遵守OO的設計理念(OO的五大原則SOLID),即使系統做得很大,也會像火箭一樣直衝雲霄!
  5. Replaceable:在很多時候我們需要考慮到系統,元件或者功能的可替換性,因為需求是會變的。
  6. Testable:做到系統的可測性,會大大幫助開發以及維護,對團隊開發以及分工協作起著非常重要的作用。
  7. Loose Coupling:隔離耦合是架構設計必須要考慮的一個因素,如果系統不能做到高內聚、低耦合,那麼在維護,升級,新功能開發方面就會是一場噩夢!
  8. High Performance:高效能是系統設計必須重視的要點,使用者不可能忍受簡單頁面載入超過十秒,也不可能接受頁面操作頻繁卡死的情形,所以在架構設計的時候必須從資料庫,邏輯,服務以及UI進行合理的優化。
  9. Scalability:如果能做到前面的幾點,那麼我有理由相信你的系統一定具備Scalability。
  10. Enjoy Your Life:最後一點也是最重要的一點,不要忙碌於重複的碼農工作,喝杯咖啡,享受程式碼,早點回家,陪老婆、陪小孩,環球旅遊,享受生活!

廢話半天,下面就開始看圖說話環節:

架構設計圖:

image

部署及元件圖:

28-7-2014 12-27-11 AM

詳細解決方案:

image

01_Client:存放UI相關的專案,比如Winform, WPF,ASP.NET, Silverlight,ASP.NET MVC或者相關的Web Model及View Model專案。

02_Hosting:存放與Service相關的專案,可以是Direct Service,Remoting Service,Web Service,WCF Service或者Web API Service 。

03_Domain:業務邏輯相關的所有實體以及操作(根據OO的思想設計類以及類之間的關係)。

04_Infrastructure:非業務方面的功能框架 (Data,Common,DataContract,AOP, IOC,Logging,Encryption,Email)。

05_Database:資料庫專案(包含所有資料庫指令碼,方便開發,部署以及維護)。

06_Tests:所有測試專案(資料訪問測試,框架測試,業務邏輯測試,服務測試以及View Model測試)。

07_ReferenceLibs:專案相關的外部引用。

08_Tools:一些簡單的工具,方便開發,測試以及部署。

各層執行序列 (呼叫Service之前需要呼叫Service Adapter,然後根據專案配置來決定呼叫WCF Service,Web API Service 還是直接DLL引用):

28-7-2014 12-34-29 AM

許可權系統設計 (支援多系統,Module多層級,Group多層級,多使用者來源,功能許可權,資料許可權等):

security

許可權系統資料庫關係圖(三個中心點:Users, Roles, Paths):

image

許可權系統所有表(包括主要表以及備份表,主要是針對中小型專案,如果大型專案則要採用分庫,分表以及分割槽的策略):

image

資料庫專案——指令碼注意事項以及如何一鍵執行所有資料庫指令碼(方便管理資料庫指令碼並且對團隊開發以及分工協作幫助很大):

image

程式碼生成器——T4完全生成資料庫,業務實體,業務層,服務層以及UI程式碼 (之前也用Winform和WPF寫過程式碼生成器,這是第一次使用T4生成整個專案,感覺非常好用,並且隨時修改隨時使用,而且還可以根據專案進行定製化)。

image

這篇文章主要是看圖說話,所以如果你有什麼反饋,心得或者建議,不妨留言,我會盡力在今天或者明天進行回覆。關於程式碼分享或者開源的問題,由於目前是幫公司做的,所以還沒有時間和精力去抽取程式碼,不過會根據反饋,然後在近期內分享更多實現細節!

如果您認為這篇文章還不錯或者有所收穫,不妨點選一下右下角的(推薦)按鈕,因為你的支援是我繼續寫作,分享的最大的動力!

相關推薦

架構設計分享許可權系統(說話)

前面一篇文章《最近架構隨想》,我提到架構設計的一些構想,其實也是對之前專案經驗的一些歸納及總結。今天我們就以許可權系統作為切入點,談一談怎麼設計許可權系統以及怎麼做到系統具有以下特性: Organized:如果系統組織比較好,可以起到事半功倍的效果。 Encapsulated:對功能,結構,資料進行有

企業管理系統前後端分離架構設計 系列一 許可權模型篇

前段時間分別用vue和react寫了兩個後臺管理系統的模板vue-quasar-admin和3YAdmin。兩個專案中都實現了基於RBAC的許可權控制。因為本職工作是後端開發,比較清楚許可權控制一個管理系統應該必須具備的核心功能,而且是可以做到通用的。打算寫寫關於管理系統前後端分離方面的文章,也是做一個知識的

首席架構師修煉道-系統架構設計原理與核心技術-張勇-專題視訊課程

首席架構師修煉之道-系統架構設計原理與核心技術—112人已學習 課程介紹        系統架構是解決系統設計和演變過程中由於業務功能和資料體量的提升而出現的各種問題的方法論和實踐,關注於系統構成結構化元素、介面及其相互協作,並提供指導性架構風格,從而實現從原型到發現和改進問

系統架構--設計模式“路由”

   傳統意義上的路由指的是物理路由器,是一個在網路中實現資料轉發的裝置,我們這裡談的“路由”,指的是軟體系統架構中的路由模式。    現代的的軟體設計模式一般是MVC模式,模型、控制器、檢視。在這樣的系統中往往有一個入口,在入口處我們可以加一個路由控制器,這樣我們就可以實

設計模式工廠模式類

工廠方法 png 工廠模式 src 設計模式 方法 .cn 技術分享 img 工廠模式:實例化對象,用工廠方法代替new操作 工廠模式包括工廠方法模式和抽象工廠模式 抽象工廠模式是工廠方法模式的擴展 實際應用舉例: 設計模式之工廠模式類圖

碼教授的UI設計分享旅一

UI設計UI設計為什麽這麽吃香,那當然是因為技術了, 還有就是移動互聯網現在對UI設計師的需求那是大大的。機會那麽多,想不熱門都難呀!這個可不是還局限於廣告公司的了,現在的互聯網時代,公司都是有自己網站,需要自己品牌的,UI設計就必不可少了。對於UI設計師的基本要求那就得包括:會需要有視覺規範的能力、界面整體

架構設計的方法學 專訪架構師周愛民:談企業軟體架構設計 C++設計模式實現程式碼

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!        

Django原始碼分析許可權系統_擒賊先擒王

乍見 Django內建的許可權系統已經很完善了,加上django-guardian提供的功能,基本上能滿足大部分的許可權需求。暫且不說django-guardian,我們先來看下Django內建的許可權系統:django.contrib.auth 包。 相識 一般許可權系統分為全域性許可權和物件許可權。

一款隨時隨地檢視餐廳室內裝潢設計的app——迅捷CAD

對於一個優秀的餐廳,必然要有完美的設計,這個時候就該設計師們來大顯身手啦!滿意的設計才會得到滿意的作品!那麼如果你公務繁忙無法時刻督促設計師的設計方案該怎麼辦?天空飄來五個字,這都不是事!迅捷CAD看圖輕鬆幫你搞定! 另外關於這些素材可以在迅捷CAD每日一

微服務架構設計基礎領域驅動設計

背景 微服務現在可以說是軟體研發領域無人不提的話題,然而業界流行的對比多數都是所謂的Monolithic(單體應用),而大量的系統在十幾年前都已經是以SOA(面向服務架構)為基礎的分散式系統了,那麼微服務作為新的架構標準與SOA有什麼差異點呢?其本質區別在於設計原理,微服務是去中心化設計,SOA是「整合」形成

微服務架構設計基礎立方體模型

背景 對於現在的微服務架構的應用來說,對大量併發的及時響應是一項制勝能力。據使用者行為分析平臺統計,隨行付的某一款APP產品每日請求就達到上千萬次使用者請求、加解密服務3000萬次/日等等。這些微服務每時每刻在處理如此高強度的請求,對資料層的應對能力要求極高。如果我們把對速度的需求放在複雜的分散式資料架構背

iOS 網路層架構設計分享

前些天幫公司做了網路層的重構,當時就想做好了就分享給大家,後來接著做了新版本的需求,現在才有時間整理一下。 之前的網路層使用的是直接拖拽匯入專案的方式匯入了AF,然後還修改了大量的原始碼,時隔2年,AF已經更新換代很多次了,導致整個重構遷移非常的麻煩。不過看著前輩寫的程式碼,肯

跟我學程式碼架構設計模式--鎖和執行緒

上篇講到鎖可以用來解決多執行緒同時訪問同一資源時的同步問題,即鎖可以控制多執行緒對函式關聯資源的的同步訪問。這一篇我來簡單分析下鎖如何解決同步問題的。 在講鎖之前,我們我們先來討論下wait和notify方法,這兩個方法是用來控制執行緒執行的。說白了就是控制執行緒狀態的流轉,wait控制執行

跟我學程式碼架構設計模式--Lock和Condition

# Condition和JDK中的Object類的wait、notify方法一樣是控制執行緒狀態的,使用Condition的前提也是必須要先獲得鎖物件。 # 之前的博文分析過鎖,這裡先來總結下鎖釋放的幾種方式: 1 呼叫鎖的unlock等方法手動釋放鎖 2 執行緒異常退出的時候虛擬機

跟我學程式碼架構設計模式--鎖和執行緒的補充

本文講講對理解鎖和執行緒有幫助的一些零散的點~ #  再思考執行緒的本質 首先理解一點:執行緒會阻塞,CPU永遠不會阻塞,除非電腦休眠!CPU一直在迴圈的忙碌執行指令,不會阻塞! 在CPU的角度上看,執行緒其實就是一個個的資料物件!這個資料物件包含了CPU要執行的程式碼的C

跟我學程式碼架構設計模式--協議棧的設計思路

如何理解協議棧? 協議棧簡單的說就是對業務資料進行層層封包和層層解包的過程。傳送資料的處理過程就像資料流入一個管道進行層層封包過濾,收資料的過程就像資料經過另一個管道進行層層解包過濾,管道中有一層層的過濾器,像堆疊起來的棧~ 如何設計協議棧? 其實很簡單,單獨拿出協議棧中的一層過濾器

跟我學程式碼架構設計模式--同步的引入

同步是什麼?為什麼要有同步?我來給你獨到的分析。 先來思考幾個相關的問題 # 計算機是用來幹什麼的? 答:幫我們解決對資料的計算和儲存的,計算機中的硬體和軟體都是為這一目的服務的! # 計算機的最小執行單位是什麼? 答:CPU指令,組成格式為指令碼+運算元 ,有的指令沒有運算

跟我學程式碼架構設計模式--異常還是返回值?

廢話少說 直接正題 寫JAVA函式到底是用丟擲異常的方式還是用特定返回碼的方式來標識函式執行錯誤呢? 我來說說我的設計哲學: 用丟擲異常的方式比較好! 首先先來分析下程式執行的流程,當一個執行緒啟動後,不管是面向物件的語言還是面向過程的語言,本質上都是以函式作為執行單位的,函式巢狀函

跟我學程式碼架構設計模式--切面思想和代理模式

最近比較忙,文章只寫要點,具體細節擴充套件請自行蒐集資料。 一 、要解決的問題 java面向物件設計裡面,最初只考慮了類和類繼承這一層縱向關係:越公共越通用的方法都在父類裡面,越具體的方法都在子類裡面。在某一個系統裡面一般會有許許多多的類繼承體系關係,比如人員管理系統中會有人員繼承體系、

【Java開發者專場】阿里特邀專家徐雷:Java為王,網際網路高併發架構設計選型

本篇文章來自於2018年12月22日舉辦的《阿里雲棲開發者沙龍—Java技術專場》,徐雷專家是該專場第三位演講的嘉賓,本篇文章是根據徐雷專家在《阿里雲棲開發者沙龍—Java技術專場》的演講視訊以及PPT整理而成。 摘要:Java從誕生以來幾乎一直是排名第一的語言,長期霸榜。在架構師成長道路中,學習Ja