論特定領域軟件架構

20250413-作?

題目

特定領域軟件架構DSSA(Domain Specific Software Architecture)就是在一個特定應用領域中為一組應用提供組織結構參考的標準軟件體系結構。對DSSA 研究的角度、關心的問題不同導致了對DSSA 的不同定義。DSSA 的必備特征如下。
? ? 一個嚴格定義的問題域和問題解域。
? ? 具有普遍性,使其可以用于領域中某個特定應用的開發。
? ? 對整個領域的構件組織模型的恰當抽象。
? ? 具備該領域固定的、典型的在開發過程中可重用元素。
請圍繞“特定領域軟件架構”論題,依次從以下三個方面進行論述。
1 概要敘述你所參與管理或開發的軟件項目,以及你在其中所承擔的主要工作。
2 說明DSSA 包括哪幾個階段的活動以及參與人員有哪些。
3 結合②詳細說明你所參與的特定領域軟件開發項目是如何進行架構設計的,給出每個階段具體的實踐過程。


?摘要

? ? 某省預約掛號系統簡稱預約掛號系統,是我司自主研發的醫療產品,該系統集眾多功能于一體,旨為提高醫療服務質量和患者體驗,隨著用戶量的逐年攀升,系統面臨著性能和可用性的挑戰,嚴重阻礙了服務質量的進一步提升。我司決定于2023年3月對預約掛號系統進行全面升級工作,計劃一年,投資800萬,我擔任系統架構設計師,主要工作就是系統架構的整體設計。因系統涉及領域較多,我們采用了DSSA的架構設計方法,通過定義領域范圍、定義領域特定元素、定義領域特定設計和實現需求約束、定義領域模型和體系結構、產生搜集可重用的產品單元等5個階段,完成了預約掛號系統升級工作,輕松應對了系統高并發時期要求的性能和可用性,得到了高層領導和組員的高度認可。

背景

? ? 隨著信息化時代的到來,各大醫院紛紛擁抱線上系統,我司順應時代潮流開發了一款集預約掛號、體檢預約、報告查詢和名醫搶號等功能于一體的預約掛號系統,旨為提高醫療服務質量和患者體驗,但隨著用戶量的逐年攀升,系統面臨著性能瓶頸和可用性的嚴峻挑戰,嚴重制約了服務質量的進一步提升,為了讓預約掛號系統持續穩定的提供服務,我司毅然決定2023年3月對預約掛號系統進行全面升級工作,計劃一年時間,投資800萬,我擔任系統架構設計師,主要工作涵蓋了系統架構的整體設計、技術棧的精準選型和各個階段的評審工作。考慮到預約掛號系統涉及業務領域眾多,我們采用了DSSA的架構設計方法來指導系統的升級工作,我們經過定義領域范圍、定義領域特定元素、定義領域特定設計和實現需求約束、定義領域模型和體系結構、產生搜集可重用的產品單元等5個階段的循環迭代,成功對預約掛號系統的每個業務領域進行了設計和實施,完成了系統的全面升級工作。

理論

? ? DSSA總共包括了3個活動,每個活動中都有不同領域的人員參與,且對參與的領域人員的領域經驗要求極高,下面介紹3個活動。
? ? 1.領域分析階段。該階段主要是對系統的業務領域進行分析,目標是產生領域模型,參與人員有領域專家和領域分析師。找出系統中的用戶需求、企業需求、可行性研究和業務目標等等領域的所有需求。然后整理這些需求,找出領域需求的共通點。再然后對需求分析,產生各個領域的模型,整理成需求規格說明書,指導后續的工作,同時也提供參考依據。
? ? 2.領域設計階段。該階段主要是對提出的問題領域找出領域的解決方案,目標是生成領域架構,參與人員有領域架構設計師。領域專家和領域分析師可能需要參與指導。首先查看分析階段提出的問題,整理歸類。然后再提出解決方案,組織評審排除風險,生成領域的體系結構模型,另外,由于領域需求有變化性,所以產生的領域體系結構也要有變化性。整理成設計文檔,為實現階段提供參考和依據。
? ? 3.領域實現階段。該階段主要是對領域的體系結構進行編碼、測試和運行維護階段,參與人員有領域實現人員。參考領域設計階段產生的體系結構模型、設計模型和需求約束文檔等材料。

實踐

? ? 預約掛號系統運行多年,已經產生了機構領域、消費者領域、統計領域和支付領域等眾多的業務領域,所以我們采用了DSSA的設計方法,獲得特定領域體系結構的階段有五個,接下來我通過對機構領域的設計為例,描述這幾個階段。
? ? 1.定義領域范圍。首先由領域分析師分析,機構領域涉及的范圍有醫院、科室、醫生等模塊。a)醫院承載科室和醫生,醫生與科室之間是多對多關系但是都屬于一個醫院。b)科室主要用來區分疾病。c)醫生與發放號源、掛號和就診等功能緊密結合。老系統中的醫院、科室和醫生的功能都比較有局限性,都是對接三方醫院管理系統,此次升級涉及了模式的改造,改為由醫院直接使用預約掛號系統錄入醫院、科室和醫生的信息,所以需要具有代表性醫院的領域專家參與設計。
? ? 2.定義領域特定元素。在領域專家的參與和指導下,我們對機構領域有了新的認識,了解到:a)醫生元素,醫生坐診分為普通號、專家號,號源與醫生不強綁定關系,普通號可以是所有醫生,專家號只對應一個醫生。b)醫院元素,首次從領域專家處聽到了機構名詞,眾多醫院可以使用機構代表,這也影響了我們后續對醫院服務的稱呼,我們改為了機構服務。c)科室元素,對疾病的分類,與醫生之間是多對多的關系。領域分析人員與領域專家一起定義了機構領域詞典,為后續的設計工作奠定了基礎。
? ? 3.定義領域特定設計和實現需求約束。我對機構領域中相關的信息有了初步的認識。首先,從領域分析人員處得到了需求規格說明書,以及分析的模型,我根據分析模型,設計了有醫院、科室和醫生等實體組成的領域類圖。其次,結合老系統目前的運行狀態材料,設計領域架構時我發現目前預約掛號系統,在檢索醫院、科室和醫生的時候,有檢索速度慢、無法查詢附近的醫院等問題,我提出了使用流行的NoSQL數據來代替關系型數據的存儲以提高性能,但這會造成項目接入多個數據庫,對數據的一致性和安全性有不小的影響。然后,我組織了討論會,邀請了領域相關的專家、分析和設計人員參與了會議,決定使用ES(Elastic Search)中間件來存儲機構相關的詳細信息,在信息存儲上服務直接與ES進行交互,采用異步增量的方式同步到關系型數據中作為后續大數據分析的離線數據,允許離線數據有一段時間的不一致。
? ? 4.定義領域模型和體系結構。a)該階段我細化了機構領域類圖,并將類圖打包成了包圖來表示機構領域的體系結構。b)又通過活動圖、順序圖描述了醫生等實體的行為,c)通過通信圖描述了醫院、科室和醫生等實例之間的交互關系。d)設計了部署圖,來描述系統各個服務如何部署和部署的參數等等。
? ? 5.產生搜集領域中可重用的產品元素。為了提高開發的效率,我又在老系統中通過系統復用整理了可重用的功能模塊。首先,我把系統中所需要數據庫構件、構件和代碼等都描述進了復用文檔中。其次,對于構件庫中ES、Nacos等這些中間件,從安全性方面考量,檢查漏洞和版本。然后,將有缺陷的組件更新成最穩定的版本。
通過設計階段整理的文檔,領域開發人員通過面相服務的開發方法,使用Spring、mybatis等工具開發了預約掛號系統的各個組件,通過單元、集成、系統和驗收測試,完成了系統的開發。

結尾

得益于DSSA的使用,我們在2024年3月份順利完成了預約掛號系統的開發并上線,又經過了一個月的精心推廣,又吸引了大批的用戶,目前用戶量已經突破千萬,又對接了11個地市的500多家醫院,在支持名醫搶號時表現突出,輕松應對萬級的用戶請求,極大的提高了系統性能和可用性,得到了項目組成員的贊譽和高層領導的高度認可。但在項目開發初期,有部分組員對DSSA的開發方法理解有誤,一度阻礙了項目進度的按時推進,針對此問題我們快速反應,經過了項目組間人員的靈活調配,完美解決了這一短板,也給了我深刻的教訓。下一步,我們準備對預約掛號系統的數據進行遷移工作,經過了此次項目的成功實施,我們對數據遷移工作充滿信息,并將以更高的要求和標準對待遷移任務。此次DSSA方法的實施是個不可多得的機會,通過這次經歷,我的知識和經驗都得到了顯著的提高。

總結經驗:
1.分段可以,但不能處處分段。
2.分小標題可以,但不能處處小標題。要說明你有幾步,否則使用:首先-其次-然后。
3.實踐部分,要盡可能的拿 功能 舉例子。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/912071.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/912071.shtml
英文地址,請注明出處:http://en.pswp.cn/news/912071.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

iOS 遠程調試與離線排查實戰:構建非現場問題復現機制

iOS開發者都知道,調試最怕兩個字:“偶發”。用戶說App閃退了,你點了十遍也沒問題;測試說功能卡頓了,你抓日志時它又順滑如新。最麻煩的是,這種“現場問題”往往在你連接不到用戶設備時發生。 面對這種情況…

SpringBoot -- 整合 Swagger3

8.SpringBoot3 整合 Swagger3 由于目前主流的開發模式是前后端分離開發。所以前后端的交互需要通過一個 API&#xff08;開發接口&#xff09; 來規范。而這個接口的開發是由后端程序員編寫的。“網站式 API 文檔” 1.導入依賴 <!-- 引入swagger3(springdoc)的依賴--> …

A Machine Learning Approach for Non-blind Image Deconvolution論文閱讀

A Machine Learning Approach for Non-blind Image Deconvolution 1. 研究目標與實際意義2. 創新方法與模型設計2.1 核心思路2.2 正則化反演:理論與公式2.2.1 退化模型2.2.2 正則化目標函數2.2.3 傅里葉域閉式解2.3 MLP去偽影:架構與訓練2.3.1 MLP架構設計2.3.2 訓練流程2.3.…

微信小程序<rich-text>支持里面圖片點擊放大

使用<rich-text>渲染類似下面的html代碼&#xff1a; <div stylecolor: red>寵物友好<br/>xxx提供寵物友好服務&#xff0c;具體請見下圖<br/></div> <img srchttps://xxx.com/xxx1.png width100%/> <img srchttps://xxx.com/xxx2.png…

BVH 文件是一種用于記錄 3D 動畫數據的文件格式,常用于 3D 建模和動畫制作。以下是對這個 BVH 文件的逐行解讀

BVH 文件是一種用于記錄 3D 動畫數據的文件格式&#xff0c;常用于 3D 建模和動畫制作。以下是對這個 BVH 文件的逐行解讀&#xff1a; HIERARCHY ROOT Hips { OFFSET 0 0 0 CHANNELS 6 Xposition Yposition Zposition Zrotation Xrotation Yrotation JOINT LeftUpLeg { OFFSE…

C語言開發:Onvif(一)

根據ONVIF官網 的介紹&#xff1a; ONVIF是一個開放的安防行業組織&#xff0c;致力于為安防行業提供和促進標準化開放接口&#xff0c;以實現IP網絡安防產品和服務的有效互操作性。 在具體實現上&#xff0c;ONVIF使用了Web Service的方式&#xff0c;設備通過WSDL定義的接口…

中科米堆三維掃描儀耳機3D掃描尺寸測量數字化建模

當下&#xff0c;耳機已從單純的音頻輸出設備進化為集娛樂、健康、辦公于一體的智能穿戴終端。相關數據顯示&#xff0c;2025年全球智能個人音頻設備出貨量突破4.55億臺&#xff0c;中國以22%的增速領跑全球&#xff0c;其中開放式耳機&#xff08;OWS&#xff09;出貨量占比達…

學習接口自動化框架pytest有哪些好處?

學習 pytest 作為接口自動化測試框架&#xff0c;具有以下顯著優勢&#xff0c;能大幅提升測試效率和質量&#xff1a; Pytest自動化測試教程&#xff0c;自動化必備之Pytest測試框架訓練營&#xff0c;只需一小時速成&#xff0c;學會直接上手實操&#xff01; 1. 代碼簡潔&…

LinuxBridge的作用與發展歷程:從基礎橋接到云原生網絡基石

LinuxBridge作為Linux網絡虛擬化的核心組件&#xff0c;已悄然支撐互聯網基礎設施20余年。它不僅是虛擬機網絡連接的橋梁&#xff0c;更是容器網絡、云原生架構的隱形支柱。 一、LinuxBridge的核心作用剖析 1. 二層網絡虛擬化的實現者 本質功能&#xff1a;模擬物理交換機行為…

探討 SYSCFG 時鐘對 ADC 采樣的影響

探討 SYSCFG 時鐘對 ADC 采樣的影響 在嵌入式系統開發中&#xff0c;對于 GD32F4 系列微控制器&#xff0c;理解 SYSCFG 時鐘與 ADC 采樣之間的關系至關重要。 以下是詳細分析&#xff1a; 一、SYSCFG 時鐘對 ADC 采樣過程的基礎性作用 1. 提供采樣時鐘信號 ADC 采樣需要時鐘…

Spring Boot 項目實訓 - 圖書信息網站

文章目錄 1. 實訓目的2. 系統設計3. 運行演示4. 實現步驟4.1 創建數據庫與表4.2 創建Spring Boot項目4.3 創建實體類4.4 創建映射器接口4.5 編寫應用配置文件4.6 測試映射器接口4.7 創建服務類4.8 創建控制器4.9 準備靜態資源4.10 創建模板頁面4.11 測試整個項目 5. 實訓總結 1…

GPU 性能可變性分析框架

大家讀完覺得有幫助記得關注和點贊&#xff01;&#xff01;&#xff01; 抽象。 分析來自 GPU 分析器的大規模性能日志通常需要數 TB 的內存和數小時的運行時間&#xff0c;即使是基本摘要也是如此。這些限制會阻止及時洞察&#xff0c;并阻礙將性能分析集成到自動化工作流程中…

Redis主從復制原理

一、Redis主從復制概述 Redis主從復制&#xff08;Master-Slave Replication&#xff09;是Redis實現高可用性和讀寫分離的基礎架構。通過主從復制&#xff0c;數據可以從一個Redis服務器&#xff08;主節點&#xff09;復制到一個或多個Redis服務器&#xff08;從節點&#x…

將ONNX模型轉換為(OPENMV可用的格式)TensorFlow Lite格式

將ONNX模型轉換為TensorFlow Lite格式 在深度學習模型部署過程中&#xff0c;我們常常需要將模型從一種格式轉換為另一種格式&#xff0c;以適應不同的硬件平臺和應用場景。本文將詳細介紹如何將ONNX格式的模型轉換為TensorFlow Lite格式&#xff0c;以便在移動設備或嵌入式設…

EXILIUM×亞矩云手機:重構Web3虛擬生存法則,開啟多端跨鏈元宇宙自由征途

在鏈游與元宇宙賽道競爭加劇的當下&#xff0c;EXILIUM憑借其去中心化開放世界、鏈上資產確權與玩家自治經濟系統&#xff0c;成為Web3原住民逃離“中心化牢籠”的首選之地。然而&#xff0c;其多鏈交互門檻高、跨設備身份管理復雜、鏈上安全風險頻發等問題&#xff0c;讓普通玩…

用3個字符表示2字節二進制數據

把1字節二進制數據&#xff0c;用可打印字符表示&#xff0c;可用十六進制。這樣一來&#xff0c;1字節變2字節&#xff0c;2倍。 2字節的二進制數據&#xff0c;可以用3個字符來表示&#xff0c;1.5倍。 2562略小于413&#xff0c;65536<68921 需要準備41個符號 包括&…

第 3 章:神經網絡如何學習

第 3 章&#xff1a;神經網絡如何學習 在第二章中&#xff0c;我們詳細了解了神經網絡的靜態結構&#xff1a;由神經元組成的層&#xff0c;以及連接它們的權重和偏置。現在&#xff0c;我們將進入整個教程最核心的部分&#xff1a;神經網絡是如何從數據中"學習"的&…

RocketMQ 消息長輪詢

文章目錄 問題所在&#xff1a;消費者如何高效地獲取消息&#xff1f;解決方案&#xff1a;長輪詢 (Long Polling - “等待與觀察”模式)長輪詢 vs. 短輪詢&#xff08;可視化對比&#xff09;為什么這個機制對 RocketMQ 這么好&#xff1f;關鍵的配置參數 讓我們用一個簡單易懂…

TensorFlow Serving學習筆記3: 組件調用關系

一、整體架構 TensorFlow Serving 采用模塊化設計&#xff0c;核心組件包括&#xff1a; Servables&#xff1a;可服務對象&#xff08;如模型、查找表&#xff09;Managers&#xff1a;管理 Servable 生命周期&#xff08;加載/卸載&#xff09;Loaders&#xff1a;負責 Ser…

視圖、索引介紹

目錄 1、視圖 1.1、什么是視圖 1.2、創建視圖 1.3、使用視圖 1.4、修改視圖 1.5、刪除視圖 1.6、視圖的優點 2、MySQL存儲結構 2.1、MySQL中的頁 3、索引 3.1、索引的數據結構 3.2、B樹 和 B樹 3.3、B樹在MySQL索引中的應用 3.4、索引分類 1、視圖 1.1、什么是視…