UIDesigner 3.0架構設計總結

UIDesigner是騰訊使用者研究與體驗設計部(CDC)設計研發的一款設計類軟體,打造一款可以讓設計師統一平臺和團隊協作的平臺型設計工具,經過1.0和2.0版本的經驗沉澱,我們決定對3.0版本進行全新的架構設計。

開發一個軟體系統,前期的架構設計承載著整個軟體的設計思想和關鍵決策,可以說是重中之重。

根據軟體架構設計思想,關注分割和交互,好的架構必須使每個關注點相互分離。我們進行了最基本的需求分析,得出兩個關注點:一是工具,二是設計繪圖,關係如圖1所示。

01

得到最基本的兩個關注點後,接著將提取關鍵需求(包括:關鍵功能需求、關鍵品質需求和關鍵商業需求),根據兩個關注點進行架構的細化設計。

一、關注點——工具

這裡我們結合UIDesigner的實際需求,提取出屬於「工具」範疇的關鍵功能需求、關鍵品質需求和關鍵商業需求。

首先,「工具」的關鍵功能需求,必須包括:磁片檔讀寫、異常捕捉、日誌記錄、安全性管理;非工具所必須,但是UIDesigner本身所要求的,包括:建構管理、緩存管理、執行緒服務、伺服器和用戶端通訊管理、國際化服務。

其次,「工具」的關鍵品質需求,品質需求包括開發期品質需求和運行期品質需求兩部分,經過分析和權衡,UIDesigner的性能主要取決於設計繪圖,而穩定性、可擴充性和可維護性才是決定「工具」本身發展的品質需求,因此,對「工具」的品質需求設計將以穩定性、可擴充性和可維護性為主。

最後,「工具」的關鍵商業需求,因為UIDesigner本身並沒有很複雜的業務需求,因此關鍵商業需求是在設計流程的優化和規範上得到體現,這方面的設計已經屬於高層模組和使用流程的設計,對架構的影響非常小,可以暫時性的忽略。

經過關鍵需求的提取,我們得到了「工具」的設計目標——可以提供通用功能(關鍵功能需求)的高穩定性、擴充性和維護性的用戶端應用。根據此目標,我們採取了DI(Dependency-Injection)和MVP(Model-View-Presenter)結合的架構,概念架構設計如圖2所示。

02

1、將上層功能進行模組劃分,每個模組內部都依賴于MVP架構,通過Model(繼承至BaseModel)定義和註冊模組,通過觀察者模式,每個模組的View都可以通過Presenter(繼承至BasePresenter)進行消息的發佈和訂閱,進行模組間的通信和交互。

2、定義集成了關鍵功能需求的PlatformService,並在BasePresenter中提供PlatformService的服務調用,這樣每個功能模組都可以使用通用的關鍵功能。

3、為PlatformService的服務定義介面,根據關鍵功能需求,得到多個服務的介面,將定義和實現相分離,實現部分作為一個特殊的功能模組(核心模組,必須存在),集成到系統本身,方便前期的驗證和後期的擴展和維護。 屬於「工具」這個關注點的架構就已經設計好了,具體的上層功能模組將在後續的開發中,根據需求一個一個模組的來完成,每個模組之間不會有任何依賴關係(開發時),缺少某個或多個功能模組的時候,軟件依然可以穩定的運行起來。

二、關注點——設計繪圖

UIDesigner是為設計師打造的設計工具,其最核心的功能需求當然就是設計繪圖了,這一塊也是變化最多的。根據隔離變化點的原則,我們將這一塊設計為繪製引擎框架,通過框架,為「工具」部分提供繪製相關的支援。

我們對繪製引擎框架進行細化分割,分離出三個關注點:圖元、畫板、輔助元件。

首先,圖元是可以通過定義進而展示出自身的基礎元件,由基礎屬性和基礎繪製介面兩部分組成,其中基礎繪製介面的定義和實現分離,這樣可以方便後期的擴展,特別是在性能改進方面發揮重要作用。概念設計如圖3所示。

03

其次,畫板作為各種圖元集合的容器,支援對各種圖元的操控和定位,被分為三層:點擊測試層、圖元設計器管理層和圖元繪製層。概念設計如圖4所示。

04

最後,輔助元件分為尺規、輔助線、全域縮略圖、遮罩裝飾器和自動對齊線等,這些輔助元件都依賴于畫板而存在。

三、架構驗證和後續開發

在概念架構設計出來後,我們對核心進行了進一步的細化設計,然後對設計的架構進行驗證。為了達到敏捷開發和節省時間成本,結合設計的架構,我們最終選擇了垂直演進型原型進行架構的驗證和後續開發。

因為架構本身是基於DI(Dependency-Injection),是非常符合垂直架構設計的一種架構模式,因此我們搭建了簡單的基礎核心(只有核心模組,沒有其他業務流程功能模組)和簡易的繪製引擎框架實現了原型。

通過對原型的測試和驗證,確定此架構滿足我們的預期。在此原型的基礎上,繼續完善核心和繪製引擎框架,並且規劃後續的業務功能,根據業務功能外掛程式,可以合理的安排專案進度,最終按照計畫順利完成開發和測試。

四、後期仍待改進的一些地方

因為各種原因,在此架構之下,仍有一些細節需要在後續的開發和維護中進行進一步的深入,如:本地資料的存儲、使用者資料安全、用戶端程式的進程安全和網路通信機制的優化等。

隨著軟體的不斷演進,功能越來越多,複雜度越來越高,架構也在不斷的磨損,我們需要不斷的重構和細節改進,直到主體架構不能完成關鍵的核心需求(包括關鍵功能需求、關鍵品質需求和關鍵商業需求)時,再進行大改進。 tinawen,本內容來自騰訊內部分享,請勿外傳!

  • (本文出自Tencent CDC Blog,轉載時請注明出處)

 

特別注意:本站所有轉載文章言論不代表本站觀點,本站所提供的攝影照片,插畫,設計作品,如需使用,請與原作者聯繫,文章轉自alibuybuy

Comments are closed.