Rafy 領域實體框架 - 領域模型設計器(建模工具)設計方案


去年4月,我們為 Rafy 框架添加了領域模型設計器組件。時隔一年,謹以本文,簡要說明該領域模型設計器的設計思想。

 

設計目標


Rafy 實體框架中以領域驅動設計作為指導思想。所以在開發時,以領域建模為首要任務。為此,我們為它開發了領域模型設計器。開發人員可以在設計器中,設計相應的領域模型,查看現有代碼對應的領域模型。

我們為這個設計器制定了以下功能:

image

  • 外部簡單設計器:也就是設計器可以部署為一個可以獨立運行的軟件。該軟件可以打開領域模型的設計圖,方便團隊中的非開發人員角色查看。同樣,這個軟件最好也能支持對模型進行設計。
  • Rafy 運行時設計器:Rafy 是一個插件化架構的框架。所以我們也期望這個設計器可以以插件的形式,直接運行在 Rafy 框架構建的應用程序中。這樣,在應用程序運行時,就能看到當前軟件對應的領域模型。
  • VS 內部設計器:這是最重要的一個功能,我們希望設計器能與 Visual Studio 深度整合。首先,這樣使得可以在 Visual Studio 中就能直接進行領域建模,並能根據模型來生成實體代碼;其次,在使用 CodeFirst 的場景下,也能在 Visual Studio 中直接根據當前的實體類代碼來生成相應的領域模型設計圖。

 

設計方案


根據當前 Rafy 框架的架構,結合要實現的設計器的功能。規划整個設計器的所需要的組件:

image

並畫出組件間的依賴圖:

Architecture

 

簡要說明各組件的用途:

  • DDD Object Model:位於最底層的 DDD 對象模型,用於描述領域建模中的實體及實體間的關系。這里的對象模型結構,決定了上層可支持的 DDD 建模類型。
  • Model Xml Document:用於支持對象模型的 XML 序列化。以 XML 文檔的形式定義了模型的顯示、實體類型、實體間的關系結構。
  • WPF Controls:WPF 中可用於顯示模型的控件集。例如:實體塊、連接線等。
  • WPF Model Viewer:基於 XML 文檔模型,操作 WPF 控件集,實現模型的顯示。
  • WPF Model Designer:同樣基於 XML 文檔模型,操作 WPF 控件集,實現模型的編輯。(由於編輯相對顯示來說更復雜,所以設計器和查看器分為兩個單獨的包來實現。第一期只實現了查看器。)
  • VS Package:Visual Studio 插件包。實現模型設計器集成到 VS 中;調用同步組件,實現代碼與模型間的同步。
  • Code Synchronizer:代碼同步組件,實現代碼與模型間的同步(Model-First 或者 Code-First)。
  • Rafy Entity Meta:當下 Rafy 框架中的實體運行時元數據包。
  • Rafy Plugin:一個可運行在 Rafy 應用程序中的插件。這個插件用於查看運行時實體的領域模型關系圖。
  • Standalone Designer(exe):獨立運行的設計器應用程序。

 

重點組件


下面,是重點組件的關系圖。

  • DDD Object Model:
    image 
  • Model WPF Controls:
    image
  • 文檔控件結構
    image

 

實現細節


設計完成后,規划整個實現的順序:

image

共花了半個月的時間來完成,以下是完成后的項目結構,其中選中的5個項目即是設計器相關的項目:

image

  • Rafy.EntityObjectModel: 對應設計中的 DDD Object Model。
    image
  • DesingerEngine: 對應 WPF Controls。該項目被設計為一個可重用的,與 DDD 無關,用於圖形設計的程序集。
    image
  • Rafy.DomainModeling: 包含了設計時的 RafyDomainDocument、ModelViewer、XML Document 等組件。
    image
  • ModelingEnv: 一個簡單的獨立運行的 WPF 程序。
  • VSPackage: VS 插件。

 

初步成果


20130328 開始實現,至20130415 完成第一版本,可在 VS 中查看實體的領域模型關系圖。

image

下面是模型查看器的效果:

圖片1

以及使用獨立應用程序查看的效果:

image

 

PS: 由於一直都使用 CodeFirst 開發模式,所以過了一年了,到現在也只是實現了模型查看,還沒有實現模型設計的功能 。X@8}U9MLE}EBUE273)]9PGF

最近半年沒怎么長進,所以沒東西可寫,今天把這個翻出來,給大家做個分享。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM