Net桌面系統架構設計
面臨問題
1.人機交互和用戶界面不夠友好
2.個性化UI需求
3.沒有一套便捷的通用數據導入導出高效解決方案
4.系統安裝包太大,應用部署和升級發布麻煩,版本控制較亂
5.不支持二次開發,系統模塊化、組件化較差,擴展性不太好,應對業務變化不夠靈活
系統技術總體架構——參考技術架構
此版本的C/S系統,基於.NET Framework 4.0,
Windows技術平台下的富客戶端應用;
採用自主的模塊化可擴展的開發框架;
O/R Mapping組件IBatis.Net
數據訪問支持Access、MS SQL Server、MySQL、Oracle主流資料庫
應用開發模型使用Prism開發框架,UI層使用MVVM開發模式
技術框架基礎組件:WPF,Enterprise Library,Unity,Prism,MahApps.Metro,NPOI等
開發平台邏輯架構
開發平台邏輯架構——總體介紹
1.框架基礎服務
2.表現層(UI)
3.領域層(業務邏輯)
4.數據服務層(數據訪問)
開發平台使用典型的分層架構是三層架構,即自上向下依次是表現層(UI層)、領域層(業務邏輯層)和數據服務層。這種經典架構經歷了時間的考驗和實踐的多次檢驗,被認為是合理、有效的分層設計。開發平台邏輯分層架構是可以分層部署的軟體架構,可以把邏輯上獨立的軟體層次部署到不同的伺服器上,實現軟體層次物理上獨立。
例如:業務層可以是一組部署在本地的DLL程序集,未來也可以使用中間件伺服器(APP Server)方便進行集群來擴展應用,不同層服務提供者與消費者之間不直接調用,而是通過依賴注入(Dependency Injection)的方式,實現層之間松耦合。
總體介紹—框架基礎服務層
1.框架基礎服務層——基礎服務需要為框架中所有層的組件提供服務。
IOC容器、用戶認證、用戶許可權控制、安全服務、日誌、緩存、Utilities庫、配置管理、消息管理、網路連接監測、異常管理、元數據、數據驗證、數據同步、配置管理、加/解密、訪問控制、定時任務、列印、文件傳輸、web服務等
框架基礎服務——基礎服務需要為框架中所有層提供服務,主要由以下幾個部分組成:
元數據(Metadata)描述數據的數據,對數據及信息資源的描述性信息,用於表單生成、報表設計等。
用戶認證(Authentication)用來唯一標識一個用戶身份的過程,當用戶試圖建立與應用程序或服務的連接時,需要提供他的身份證明。
用戶授權(許可權管理)用於管理經過認證的用戶是否有許可權訪問某個操作或資源。
網路連接監測 為系統提供基本網路連接服務,可監測網路狀態使系統以無縫的方式切換線模式和離線模式。
數據驗證 客戶端數據驗證是為了驗證數據的長度、類型等是否符合輸入要求,伺服器端驗證則是驗證輸入數據是否與資料庫中已存在的數據匹配
定時任務 系統支持定時器框架來實現定時任務,如郵件自動提醒功能、報表數據分發等功能
加密解密是為了保證系統安全訪問提供數據服務,可支持本地數據加密解密等。
審計(Auditing)是出於安全的目的跟蹤用戶在應用程序中的業務操作活動,並記錄業務活動的類型、數據、時間以及用戶
文件傳輸 提供遠程文件傳輸的功能
日誌是在任何應用程序中的基本工具,應用程序利用日誌記錄應用程序與用戶交互時的事件。
緩存(Caching)是一種基本的工具用於將經常被應用程序訪問的數據保留,預備下一次被應用程序讀取。也用於保留需要花費許多時間或者資源創建、獲取和傳遞的對象。
Utilities庫以服務的方式提供Utilities全局庫供其它所有層訪問
配置管理提供簡單有效對應用程序配置數據的讀寫訪問。
列印服務 提供實現系統列印功能的基本服務。
Web 服務 使系統可方便訪問外部Web Service API。
多語言使用資源文件的方式提供多語言支持
統一異常管理提供對程序異常的統一封裝。
基礎服務層為系統提供一個IOC容器,不同層之間和服務提供者與使用者之間不直接引用,而是通過依賴注入的方式,實現松耦合。IOC容器支持系統事件發布和訂閱機制,使不同模塊之間減少耦合,還可以支持AOP方面的擴展。
2.表現層(UI)
——表現層在於數據的收集和展現,關注重要的操作易用性、簡潔美觀性,但該層並不包括相應的業務邏輯,業務邏輯由邏輯層封裝。
表現層使用SCSF2010提供可擴展的框架,可視元素(UI控制項)與控制它們的應用程序完全獨立,可視元素可以自由組合,用以提供複雜而靈活的用戶UI。不同UI模塊之間採用事件發布/訂閱來實現相互通信,採用基於弱類型引用的共享狀態和狀態保持來實現數據共享。
在表現層使用MVC/P模式來實現模型、視圖、控制器邏輯代碼分離。表現層(Presentation)包含富客戶端程序用以響應用戶輸入輸出,同時包含移動端、Web端及可擴展插件(Add In),關注於數據的收集和展現,實現操作易用性、簡潔美觀性。
1.表現層SCSF2010框架
Prism框架(採用SCSF2010框架進行開發,該框架可提供一個開發環境能很好的隱藏複雜度和提高生產力,通過高度抽象和關注點的分離,開發人員能夠關注於業務邏輯提高基礎框架代碼的復用。
ShellApplicaiton是Prism應用程序的主窗口,是啟動程序最外部的容器。ShellFrom和Module模塊直接松耦合,模塊根據目錄或配置文件動態實現裝置。
根據業務需要,系統平台應用程序由多個Module(DLLs)組合而成。每個Module包含了包含可視化的View組件和非可視化的Service和用戶業務邏輯的封裝組件。
在每個模塊內部本身代碼來控制把本模塊相關可視化內容添加到Shell中的導航區域和工作區域。
可視元素可以自由組合,提供複雜而靈活的用戶UI?不同模塊之間通過物理隔離(獨立DLL文件)消除耦合。
不同模塊之間在代碼層面也是松耦合的關係,採用(Event Broker)事件發布/訂閱來實現相互通信,採用基於弱類型引用的共享狀態和狀態保持來實現數據共享。模塊之間不需要代碼直接調用/引用。
2.應用布局設計
頂部是區域為公共菜單和工具欄區域。左側是功能模塊導航區域,右側部分為主工作區域。
3.UI模塊化設計
UI模塊內部使用MVVM模式,定義一個介面負責View Model和View之間的通信,使代碼職責分離,將界面獨立於業務邏輯,讓界面和業務邏輯鬆散的耦合起來。
使用IOC容器把Application Service注入到Presenter中,Presenter層使用Application Service獲取Domain層數據。
Domain層通過相對應的Domain Repository調用DataService從數據持久層中獲取數據。
4.菜單導航
3.領域層
——主要提供給表現層調用,負責系統領域業務的處理,負責邏輯性數據的生成、處理及轉換。
領域服務主要是向外界提供訪問業務組件的入口點,它作為一種服務存在
業務實體對象用於代表真實世界中的對象,一般使用數據結構來表示、XML流或者是用戶自定義的面向對象的類,業務實體用來在各層之間以及各組件之間進行通信和傳遞數據
業務外觀層集中處理業務流程,涉及多個業務步驟以及集中的事務處理,通過組合和調用多個業務組件來完成一個特定的業務處理
系統集成模塊用來集成第三方應用,和對外提供標準API
領域層——主要提供給表現層調用,負責系統領域業務的處理,負責邏輯性數據的生成、處理及轉換。領域層包括領域服務層、應用程序層、應用程序外觀層、系統集成模塊。
根據系統需要還可以在此層中部署實現一個Web Service服務層以支持移動端、Web端或第三方AddIn插件使用。
領域層由上到下包括:
1.應用程序外觀層(Application Service Fa?ade)
根據系統需要應用程序層中還應該包含應用程序外觀層(Application Service Fa?ade)的用意在於為上層(表現層)提供粗粒度的調用介面。本身不處理任何業務邏輯,主要是將一個上層請求委派給一個或多個Application Service進行處理。
提供了一組功能性Open API來支持第三方擴展。
2.應用程序服務層(Application Data Service)
應用程序服務層(Application Data Service)中從應用程序級別定義並實現了平台應用程序提供API(基於程序功能或任務)介面
應用程序服務層還包含一個遠程訪問代理(Remote Service Proxy),使應用程序可以訪問遠程和本地服務無縫切換
不包含任何業務邏輯和業務狀態對象。
本層還提供Data Adapter/Converter功能,可以把跨層基礎組件中定義的Data Contract對象轉換為領域服務層中Domain對象。
3.領域服務層(Domain Model Layer)
領域實體對象用於代表真實世界中的對象,一般使用數據結構來表示,是用戶自定義的面向對象的類
領域服務和服務介面—向外界提供訪問業務組件的入口點,它作為一種服務存在。
領域值對象
領域Repository介面定義,領域服務通過領域Repository與數據持久層通信。
領域層關注實現系統中相對穩定和核心的業務邏輯,
領域層只關注與業務,不考慮數據訪問相關技術性的內容。
領域服務層還提供基於領域級別的數據事務支持。
4.系統集成模塊(System Integration)
基於平台開放API的開放應用開發和接入環境以及為業務應用提供內容和信息的服務,包括:開放API、數據訂閱分發服務
把外部系統集成到本數據採集平台中,使外部系統和本平台融為一體,包括應用集成、服務集成、數據集成。
4.數據服務層
——抽象為所有數據存取、更新和設定操作的存取點,負責與數據源的交互,即數據的插入、刪除、修改以及從資料庫中讀出數據等操作。
數據服務層定義了數據服務所使用的數據模型對象(Data Model)
提供獨立於底層數據源的標準的可重用的數據讀寫介面,通過此介面可以以統一的方式訪問各種不同類型的資料庫、文件系統、第三方應用程序提供的服務。
O/R資料庫存取中間件(NHibernate、ADO Entity等)
提供服務代理引擎(Service Agents)實現訪問第三方應用提供服務(通常是Web Service)
數據服務層(Infrastructure Layer for Data Persistence)定義統一標準與資料庫無關的數據訪問介面和數據對象模型,可以以統一的方式訪問各種類型數據、本地文件系統和本地緩存系統。
數據服務層抽象為所有數據存取、更新和設定操作的存取點,負責與數據源的交互,即數據的插入、刪除、修改以及從資料庫中讀出數據等操作。
Domain的Repository對象和Data Service介面對上層公開。資料庫訪問層為多個單獨DLLs文件,可分別部署在伺服器端和客戶端。
1.數據提交與同步
2.Domain Repository
Domain Repository層通過調用DataService介面的方式訪問數據數據源
3.Data Service
Data Service提供一組獨立於底層數據源的可對標準的可重用的讀寫介面,使用統一的標準中調用不同種類資料庫訪問組件(O/RMapping)來實現訪問多種數據源。
4.將對象映射到關係庫(O/RMapping與DataModel)
定義了數據服務所使用的數據模型對象(Data Model),使用第三方O/R Mapping工具,提供數據傳輸對象(DTO)到Data Model的轉換功能。
5.Service Agents
為了方便與第三方系統集成,同時提供服務代理引擎實現訪問第三方應用程序服務。支持用戶使用Plug In插件的方式擴展數據服務層功能,用戶可以根據需要實現自己個性化數據服務介面,來實現為平台提供用戶數據
開發平台架構優勢
1.提供一個針對企業級智能客戶端應用的公共開發體系結構,提供成熟的模塊化方案,支持模塊化應用程序開發,允許構建由各個具有協作關係的獨立模塊組合成的複雜應用,並且在運行時對各個模塊進行動態管理,使系統可以拆分成多個部分來對立開發,適合較大項目多個團隊合作開發,方便整合。
2.通過將前端UI和後台邏輯完全分離(包括事件),讓開發團隊每成員都能專註於自己的工作,使得核心開發人員能夠關注於業務邏輯,讓不熟悉業務的UI人員也可以方便的參與開發,可以使用測試驅動開發,方便編寫單元測試,保證系統穩定性,對於大型開發團隊來說,能夠提高生產率,縮短產品開發周期。
3.高度可擴展性和靈活性,由於邏輯分組的組件和多層體系結構帶來的解耦,可以很容易地添加新的功能,而不會影響太多對整個系統。
4.功能模塊封裝成物理獨立DLL文件,通過配置服務的方式接入系統,可以實現功能插件的「熱插拔」。還可以提供外部服務的動態接入(通常是通過WebService)。
5.系統穩定性,單獨的層升級或是改變不影響其他的層,依賴介面的實現能很好的減弱所有的層之間的單獨改變而不怎麼影響其他層。例如,如果保持介面不變,我們能單獨的更新或替換任何層的實現,而不需要影響整個系統,例如,起初我們主要使用Windows Form,現在我們主要使用WPF,如果我們的原始系統是通過層架構來實現的話,我們就只需要把客戶端從Windows Form更新成WPF而不需要改變服務層。
6.對於開發來說比較友好和高效層的解耦是邏輯軟體組件組的主要功能,他們對於軟體開發來說都非常的友好和高效,每一層可以被單獨分配到一個團隊專攻特定的功能區域;一個專業團隊可以處理相關的任務更有效。
7.更好的可重用性,基礎框架代碼可復用,這是由於部分的邏輯分組,層與層之間的鬆散耦合。鬆散耦合的組件通常是在更一般的方式實現的,因此他們可以通過更多的其他應用程序中重複使用,增強編碼生產效率。(組件重用性,API)
8.系統安全性,包括身份認證、授權、數據安全(訪問、傳輸、存儲)等。能夠保障本地的潛在機密信息的安全,對於整個系統更好的和更精細的安全控制。我們能根據每層的安全需求不同而進行不同的安全控制。
9.系統部署方便性,提供版本監測及系統自動升級,易於部署和配置。
10.系統可擴展性,支持二次開發,頁面自動生成,(UI、Addin、服務)在基於框架平台高度可復用和可擴展的基礎上,以非常容易的支持二次開發,只要遵循相同的介面和協議,就可在框架平台進行二次開發。
系統基本組件設計——通用數據導入/導出組件
數據導入採用界面配置導入模板的方式配置導入信息,方便用戶配置和配置信息的重複使用
通過ExcelManager獲取導入Excel文件信息
通過ImportManager設置需要導入的業務模型信息和保存導出配置
ImportConfig通過Excel文件信息和業務模型項進行映射後生成相應的業務模型數據,設置提交數據校驗欄位和數據衝突處理後,提交到相應的服務去做入庫校驗和入庫處理數據入庫失敗回滾當前的操作並提示錯誤信息供用戶修改導入模型或導入Excel文件信息
導入數據校驗模式
通過設置數據校驗欄位和數據衝突處理模式可以在入庫時對當前資料庫中的數據和導入數據發生衝突時進行處理
全覆蓋模式:刪除當前井筒的當前業務項所有數據後導入當前數據
更新模式:可以通過校驗欄位檢驗出已經存在的業務數據.然後採用兩種解決方法.
全部更新:刪除當前井筒已經存在的業務數據後導入當前數據
部分更新:刪除當前數據中的已經存在的業務數據後導入當前數據
數據導出
數據導出採用界面配置導入模板的方式配置導入信息,方便用戶配置和配置信息的重複使用
通過ExportManager獲取和保存導入配置
ExportConfig通過獲取業務模型設置Excel填充項並調用ExportManager保存導入配置信息.
通過ExcelManager獲取ExportConfig的配置信息向與業務模型對應服務發出數據請求,帶數據返回後導出數據為Excel文件
系統基本組件設計——量綱組件
採集客戶端系統提供統一量綱系統服務,也可以集成外部提供量綱服務。
碼錶管理組件
平台同時可以使用由數據中心統一管理的系統碼錶和自定義的個性化碼錶系統,同時提供一套基於XML描述的數據映射機制,採集客戶端向數據中心提交數據時,必須把數據中使用的數據碼錶映射到系統數據碼錶。
應用個性化組件
不同用戶根據需要UI定製,使用符合自己使用習慣和業務需求的UI操作界面。
在用戶使用過程中系統會記錄登錄用戶的操作習慣,記錄用戶UI相關數據、包括窗體位置、窗體大小、最經常使用的功能、最近錄入數據等的設置,當用戶下次登錄系統自動為用戶載入這些設置,方便用戶操作。
數據訪問組件
數據服務層定義統一標準與資料庫無關的數據訪問介面和數據對象模型,可以以統一的方式訪問各種類型數據、本地文件系統和本地緩存系統,為了方便與第三方系統集成,同時提供服務代理引擎實現訪問第三方應用程序服務(通常是Web Service服務)。
數據持久化存儲支持數據源:
關係資料庫:基於配置的形式通過O/R Mapping來支持各種主流關係資料庫(MySql、Oracle、MSSql等)。
實時資料庫:支持對實時資料庫的只讀訪問。
文件伺服器或文件系統:系統可以既可以本地文件,也可以訪問遠程文件伺服器上文件,文件包括結構化的文件(例如:Access、SQLite等基於文件的資料庫)和非結構化大文件(數據文件、流文件、圖片、文檔等二進位文件)。
關係數據+文件系統:把文件位置索引等文件元數據信息存儲到關係資料庫,文件存儲到文件系統,由系統提供對文件的訪問。
對象資料庫和文檔資料庫:支持使用流行對象資料庫和文檔資料庫進行數據存儲。
第三方數據服務:支持通過XML SOAP訪問外部數據服務。
系統基本組件設計——應用集成組件
1.是基於平台開放API的開放應用開發和接入環境以及為業務應用提供內容和信息的服務,
開放API
數據訂閱分發服務
2.把外部系統集成到本數據採集平台中,使外部系統和本平台融為一體
包括應用集成
服務集成
數據集成。
3.系統平台兼顧融合和特性和開放的特性。支持內容融合、支持多來源,多形態的內容接入分發。同時也支持應用融合,提供統一的與第三方應用融合的解決方案。
應用易接入
分層的平台架構
開放的API,面嚮應用屏蔽網路、系統平台和多終端接入的差異性和複雜性。
基於SOA架構,服務可集成,服務易重用,簡化應用間的服務交互。
資源共享化,數據資源共享。
人機交互及用戶友好性
人機交互友好,用戶數據錄入便捷。簡化用戶工作,在儘可能降低錄入出錯率的情況下完成數據錄入。
除了使用表單錄入數據外,系統可以在數據列表中提供類似於填表式的數據編輯和錄入功能,以方便處理大量數據。
盡量減少用戶輸入,同樣的信息在多處都需要時,系統可以自動複製信息,用戶可以不輸入使用系統提供的預設值。
系統應該及時為用戶提供幫助和反饋信息,如當滑鼠移動到輸入框上,提示用戶需要輸入的內容、格式等。
提供錯誤檢測和修改方法,系統應該具備簡單的恢復功能,提供恢復以前的數據項。還需要數據檢測防止錯誤數據錄入,及時向用戶提示出錯信息。
提供臨時狀態保存的功能,用戶可以暫時退出保存當前狀態。
系統簡單部署自動升級
多語言支持
一、系統數據模型中相關碼錶需要提供多語言支持,對於不同的語言提供相對應的碼錶數據,這部分需要數據模型進行相應的擴展,碼錶服務層設計支撐模型的擴展。
二、應用程序本身多語言支持
應用程序UI中涉及到的標題、文字以及信息提示框等文本信息多語言支持。使用不同資源文件的方式存儲多語言的文本內容。
應用程序中日期類型數據多語言支持,系統內部使用統一日期格式進行存儲,然後根據不同語言對應的系統區域設置,系統自動選擇需要顯示的日期格式。例如:針對日期?數據「2015/1/30」,根據不同區域設置,中國可以顯示成 「2015?年?1?月?30?日」,美國設置顯示成「Jan 30,2015」,英國設置顯示為「30 Jan,2015」
應用程序中時間類型和時區支持,如果需要可以根據系統區域設置中對應的時區進行顯示。根據系統需要可以在系統中存儲UTC(通用協調時)時間,根據系統所在區域設置顯示系統區域所在時區的時間。
數值類型數據也需要按區域設置指定的格式進行顯示,不同語言、不同區域設置中數值格式也有所區別,系統根據當前區域設置,轉換成合適的格式進行顯示。輸入錄入方面也需要考慮顯示格式的差異性。例如:英文數值「56.23」,而法語中是「56,23」,不同語言之間數字顯示有差異,根據系統區域設置,自動轉換成需要顯示的數值格式。


TAG:程序你好 |