述
本文主要為需要編寫軟件設計/開發文檔的讀者提供一些經驗和建議。
一般來說,軟件開發相關的設計文檔大多都具有以下特點:
因此,一般建議此類文檔使用純文本的 Markdown 格式編寫。
Markdown 使用一些簡單的標記語法,即可展現最常用的標題、列表、重點、引用、代碼塊、鏈接等功能。后期也能方便地導出為 HTML、PDF 等格式。
有關 Markdown 語法可參考:https://www.runoob.com/markdown
編寫設計文檔時,必須以「公司新人」的視角去編寫,不能對讀者實現所了解的內容做任何假設。
因此,一份設計文檔,一般來說至少需要包含以下幾塊內容:
不要直接使用「文檔」、「設計文檔」作為文件名或標題。
文件名或標題最好使用「一句話描述」,如:
這樣,一來不容易有文件重名問題,二來讀者能夠在不打開文件的情況下,大致了解文檔內容。
任何文檔都要添加目錄,這樣可以方便讀者在首次閱讀時了解文檔大致內容,也能方便快速查閱、跳轉到特定內容。
使用 Typora 可以選擇「段落 - 內容目錄」插入目錄
使用 Sublime Text、VS Code 可以使用 MarkdownTOC 等插件生成目錄
注意:不同軟件的目錄實現方式不同,互相之間可能不兼容
任何設計文檔都要對業務流程進行描述,具體寫明「用戶做了什么操作,系統進行了什么處理,最后發生了什么」。
對于簡單的業務流程,可以直接使用列表進行描述,如:
對于復雜的業務流程,可以使用流程圖方式描述,如:
提示:流程圖可以使用 ASCII Art、專業流程圖工具、PowerPoint、Keynote 等軟件進行繪制
業務流程中產生的業務實體,必須明確所有的字段、字段類型、取值范圍、數據來源等信息。
假設存在業務實體「課程」,數據定義表格如下:
字段 | 類型 | 必須/默認值 | 說明 |
code | String | 必須 | 課程編號,全局唯一 |
name | String | 必須 | 課程名稱 |
type | Enum | 必須 | 課程類型,可選值:文科=liberal 、理科=science |
seatCount | Integer | 必須 | 位置數量,取值范圍:0 ~ 100 |
userId | String | 必須 | 課程創建人 ID。創建時自動填入 |
teachers | Array | 必須 | 教師列表 |
teachers[#] | Array | 必須 | 教師列表元素 |
teachers[#].userId | String | 必須 | 教師的用戶 ID |
teachers[#].position | Enum | 必須 | 教師職位,可選值:主講人=speaker 、助教=assistant |
tags | Array | null | 課程標簽列表 |
tags[#] | String | 必須 | 課程標簽元素 |
extraInfo | Dict | null | 額外信息 |
extraInfo.computerRequired | Boolean | false | 是否需要自帶計算機 |
extraInfo.outdoorActivityIncluded | Boolean | false | 是否包含戶外活動 |
注意:表格中說明不宜過長,對于某些需要復雜說明的字段,應當為其單獨開設下級標題進行詳細描。
使用表格展示字段列表,結構更為清晰,對閱讀者負擔也更低。此外,在因為在編寫時也不容易遺漏字段的某些描述。
對于 JSON 數據,也可以直接使用 JSON 格式展現,如:
{
// [必須] 課程編號,全局唯一
"code": "CLASS-001",
// [必須] 課程名稱
"name": "語文 1",
// [必須] 課程類型,可選值:文科=`liberal`、理科=`science`
"type": "liberal",
// [必須] 位置數量,取值范圍:`0 ~ 100`
"seatCount": 100,
// [必須] 課程創建人 ID。創建時自動填入
"userId": "user-001",
// [必須] 教師列表
"teachers": [
{
// [必須] 教師的用戶 ID
"userId": "user-002",
// [必須] 教師職位,可選值:主講人=`speaker`、助教=`assistant`
"position": "speaker"
},
{
"userId": "user-003",
"position": "assistant"
}
],
// 課程標簽,元素為 String
"tags": [ "基礎", "必修", "特級教師主講" ],
// 額外信息
"extraInfo": {
// 是否需要自帶計算機
"computerRequired": false,
// 是否包含戶外活動
"outdoorActivityIncluded": true
}
}
注意:使用 JSON 格式展現時,應當整理為容易閱讀的縮進格式
推薦優先使用表格方式描述,JSON 方式次之,同時提供表格和 JSON 方式則為最佳!
對于小型系統、單個功能模塊的設計文檔,提供上述 4 個基本內容基本可以滿足需要。
如果是針對整個系統的描述,或者多個、復雜功能模塊的設計文檔,那么就有必要增加更多的內容來進行說明。
對于大型系統的設計文檔,應當將文檔劃分為層級:
文檔中出現的的概念、業務實體需要明確的定義,避免誤解。如:
并配合示例示例進行說明。如:
無論是系統整體設計,還是單個功能模塊的設計,都可以附帶架構圖方便讀者理解。
如:DataFlux Func 的架構圖
如:DataFlux Func 中「訂閱器」的架構圖
已經成型的項目,一方面為了讓新人能夠快速掌握項目整體情況,另一方面為了規范后續開發工作,可以添加項目文件目錄進行說明。如:DataFlux Func 項目目錄說明
目錄/文件 | 說明 |
client/ | 前端代碼(Vue.js) |
client/public/ | 前端靜態文件 |
client/src/ | 前端源代碼 |
client/src/common.js | 前端通用業務處理 |
client/src/const.js | 前端常量定義 |
client/src/toolkit.js | 前端非業務通用工具包 |
server/ | 后端代碼(Node.js + Express) |
server/controllers/ | 后端接口處理模塊 |
server/models/ | 后端業務實體對象模塊 |
server/routers/ | 后端路由模塊 |
server/utils/ | 后端非業務通用代碼 |
server/app.js | 后端入口文件 |
server/setup.js | 后端安裝程序 |
server/sub.js | 后端訂閱器 |
server/route.yaml | 后端接口定義 |
server/const.yaml | 后端常量定義 |
worker/ | 工作單元代碼(Python3 + Celery) |
worker/tasks/ | 工作單元任務模塊 |
worker/utils/ | 工作單元非業務通用代碼 |
func-pkg/ | 內置腳本包,項目啟動后自動讀取并導入 |
db/ | 數據庫導出文件 |
sdk/ | 調用本系統的 SDK 文件 |
test/ | 自動化測試 |
tool/ | 項目實用小工具 |
run-server.sh | 后端服務啟動腳本 |
run-worker.sh | 工作單元啟動腳本(監聽所有隊列) |
run-worker-by-queue.sh | 工作單元啟動腳本(監聽指定隊列) |
run-beat.sh | 定時器啟動腳本 |
admin-tool.py | 管理員工具 |
config.yaml | 配置文件(所有服務共用) |
對于文檔中出現的關聯、參考文檔,應當羅列出來,方便快速參考。如:
合理使用格式,可以幫助讀者更快地理解內容,降低閱讀負擔。
為每個標題加上分級編號,會使得目錄更清晰,同時也能方便讀者隨時確定當前的閱讀位置。如本文使用了1.、1.1、1.1.1方式編排大小標題
但需要注意的是,標題層級不易過深,一般以不超過 4 層為佳。最小一層的標題可以考慮不添加分級編號,如:
1. 云計算概述
2. 云廠商現狀
2.1 國內
阿里云
騰訊云
華為云
2.2 國外
AWS
Azure
Oracle
需要讀者注意的地方,應當使用統一的強調格式,如:
注意:所有的注意點都以「注意:XXX」格式呈現
同理,一些“順便一提”的提示內容,也應當使用統一的格式,如:
提示:所有的提示都以「提示:XXX」格式呈現
羅列內容時,應當使用列表方式展示,如:
也可以附上簡要說明,如:
附加官網、入口鏈接時,可以直接展示為可以點擊的 URL 地址,如:
https://docs.guance.com
如果所附帶的鏈接為特定內容,數個鏈接羅列,URL 地址很長等,應當為鏈接標注文字說明,如:
【 觀測云產品介紹 】https://docs.guance.com/getting-started/product-introduction/
【 觀測云產品優勢 】https://docs.guance.com/getting-started/product-introduction/advantages/
在文檔編寫過程中,對一些細節的把控,可以顯著提高文檔質量,減少閱讀者負擔。
前后一致的用詞,不僅可以方便搜索,也能提高閱讀效率。
正確示范:
阿里云是國內份額最大的云廠商,絕大多數企業用戶都選擇在阿里云上開展業務。
與此同時,阿里云的產品也是國內云廠商中最為豐富的一家。
姓名:字符串,必須,長度范圍 2~4
學校:字符串,必須,長度范圍 1~10
年齡:正整數,必須,取值范圍 1~99
身高:正整數,可選,取值范圍 1~200
錯誤示范:
aliyun 是國內份額最大的云廠商,絕大多數企業用戶都選擇在阿里云上開展業務。
與此同時,Alibaba Cloud 的產品也是國內云平臺中最為豐富的一家。
姓名:字符串,必須,最短 2 個字符,最長 4 個字符
學校:必須,str,長度范圍 1~10
年齡:正整數,取值范圍 1~99,必須
身高:可選,大于 0 的整數,最大 200
中英混排時,在英文前后添加空格會更容易閱讀。
當中英混排的應為為字段名時,使用代碼格式展示。
當涉及按鍵時,使用按鍵格式展示
有時,長篇大論不如一個完整的示例更加直觀,如:
在 DataFlux Func 中編寫如下代碼,即可實現一個加法函數
@DFF.API('兩數相加')
def plus(x, y):
'''
x, y 自動轉換為浮點數
'''
return float(x) + float(y)
當處理涉及到外部系統時,進行簡要說明并附帶外部系統的文檔鏈接,如:
觀測云云關聯處理邏輯
1. 查詢所有當前系統內已有的主機列表
2. 調用 KODO API 獲取本工作空間的 AK 列表
2. 根據主機列表調用云平臺 API 獲取 Meta 信息
3. 根據字段映射,更新方式寫回主機對象
【 KODO 獲取 AK 列表接口文檔 】https://gitlab.jiagouyun.com/cloudcare-tools/kodo/-/blob/dev/apis.md#v1keyconfigget-get
【 DataWay 更新對象數據 API 文檔 】https://gitlab.jiagouyun.com/cloudcare-tools/kodo/-/blob/dev/apis.md#v1keyconfigget-get
文檔完成后,有條件的可以選擇使用 git 管理,也可以使用普通網盤管理。
當需要使用釘釘群發文檔時,可以使用 Typora 的導出為 PDF 功能。方便沒有 Markdown 編輯器的人直接在釘釘內預覽方式閱讀。
文 | 湯佩蘭
責編 | 陳曉雪
2020年10月5日,2020年諾貝爾生理學或醫學獎頒發給了三位發現丙肝病毒(HCV)的病毒學家,分別是哈維·奧爾特(Harvey James Alter),邁克爾·霍頓(Michael Houghton)和查爾斯·萊斯(Charles M. Rice)。這讓丙肝病毒的發現和治療再次進入媒體和大眾的視野。
“雖然諾獎(頒給丙肝病毒工作)我很高興,但是丙肝這一塊,我覺得還不是最好的狀態,”10月5日晚,蓋茨基金會北京辦事處副主任徐福潔對《知識分子》表示。
2016年,世界衛生組織(WHO)提出2030年消除病毒性肝炎作為重大公共衛生威脅的總體目標。肝炎病毒是全球肝炎的最常見病因,其中乙型和丙型肝炎導致數億人罹患慢性疾病,二者還是肝硬化和癌癥的最常見病因。
今年6月,《健康中國2030消除丙肝威脅行動白皮書》(下簡稱《白皮書》)發布,提到中國估計有超過760萬例慢性丙肝患者。他們若不能得到及時治療,15-30%的患者會在30年內發展出肝硬化、肝衰竭甚至肝癌等一系列健康問題。《白皮書》指出,我國對消除丙肝公共衛生威脅缺少國家層面更細致的統一規劃和目標;另外就是在丙肝防治的各個環節,大眾對于丙肝的認識不足,導致從預防、篩查到診療等各個環節都有問題產生[1]。
根據2019年一項綜合統計數據,丙肝在中國診斷率僅為22.51%,治療率僅為3.49%[2]。上述《白皮書》提到,丙肝在早期感染階段幾乎沒有明顯癥狀,會無意間加劇病毒的蔓延,因此在感染早期階段通過篩查將患病人群篩查出來進行感染阻斷,對全面消除丙肝的目標具有決定性作用。
徐福潔曾在美國聯邦疾病控制中心(CDC)工作,從事肝炎相關工作十多年,在2015年到2017年間還作為吉利德亞太地區項目負責人(medical director),專門為該地區中低收入國家丙肝病人能夠用上低價丙肝藥開展了一系列工作。
徐福潔表示,對于丙肝的防治,我們還沒有真正把這件事情做清楚,“需要利用好現在的這些檢測、治療的手段。盡管相對于其他很多疾病,丙肝在國內不是特別嚴重,但是未來因為丙肝得肝癌或者得肝硬化,是不該再發生的事了。”
對于三位獲獎人,徐福潔都有過一起開會的經歷,在美國工作的時候,跟奧爾特一同參加了慶祝丙肝病毒發現20周年的活動。印象最深刻的是與奧爾特相處的經歷,
“Alter這個人特別幽默,他回憶自己的發現,開玩笑說自己沒什么創造性,不是creative person,所以當他知道不是甲肝,也不是乙肝的時候,就命名一個非甲非乙肝炎(non-A,non-B hepatitis)。”
20世紀70年代,奧爾特與其研究小組證明,大多數輸血后肝炎病例不是由甲型和乙型肝炎引起的,因此將其命名為“非甲非乙肝炎”。通過對黑猩猩的傳播研究表明,進一步發現這種新型肝炎引起的感染是一種新型病毒。
那么,當年奧爾特博士為什么會關注肝炎的問題呢?
徐福潔介紹,奧爾特并非直奔丙肝病毒的研究,最初就是為了保證血液安全這一臨床問題。“奧爾特博士是NIH(美國國立衛生院)血液安全小組的,他做的工作相對來說不是基礎研究,而是保證輸血安全,因為輸血后有肝炎發生。當時他就開始著手怎么降低這個事。”
當時已有研究表明多次輸血患者中有30%的肝炎發病率,主要跟使用商業血庫有關。到1970年,NIH血庫轉為志愿者血庫之后肝炎發病率下降到約10%,但其中乙肝僅占全部肝炎的30%。等到1975年,科學家們通過檢測和推理發現一部分病例不是甲肝也不是乙肝,由于當時尚未證明這是一種新的病毒,因此一開始沒有使用丙型肝炎,而是采用了不確定性更強的術語進行命名[3]。
徐福潔感慨地說,從2000年開始就有人預測丙肝病毒的工作可能得諾獎,到現在20年了,今天獲獎,很可能有新冠疫情的促進作用。“要不然都是腫瘤方面的。今年我覺得是回到一個普通的病毒。”
她同時表示,諾獎委員會肯定了發現丙肝病毒的工作,諾獎得主們的工作當然是有很多“驚喜”,但還有其他人做了大量相關工作,“這真是一個很宏大的過程”。
徐福潔所說的相關工作,就包括2013年在美國上市的第一個抗丙肝病毒的核苷類聚合酶抑制劑索非布韋(Sofosbuvir)發明者邁克爾·索非亞(Michael J. Sofia)。
由于索非布韋的發明讓丙肝患者從幾乎無藥可治到絕大多數患者能夠更快、副作用更少的被治愈,索非亞憑借該發明獲得了2016年的拉斯克醫學獎。
“看到(諾獎的)消息,這些人都還挺年輕的。在這次看來覺得諾獎真的沒那么神秘,就是那么多人做的工作。”徐福潔說道。
參考鏈接:
[1]《健康中國2030消除丙肝威脅行動白皮書》發布
http://liver.org.cn/portal.php?mod=view&aid=776
[2] https://cdafound.org/dashboard/polaris/dashboard.html
[3] Harvey J. Alter, The road not taken or how I learned to love the liver: A personal perspective on hepatitis history, Hepatology
https://aasldpubs.onlinelibrary.wiley.com/doi/full/10.1002/hep.26787
色字體有鏈接 鏈接在旁邊
Node-RED系列文章目前已經寫了9篇,介紹了Node-RED的安裝以及默認安裝的一些基本節點的使用,作為物聯網的一個可視化拖動的流程,Node-RED的確實很容易上手。還沒開始學習的同學可以先看下我以前的文章
上一期我給大家介紹了dashboard的安裝以及一個按鈕的配置,這一期我們來更加系統地學習一下dashboard的節點配置。
上一期我們已經知道 dashboard的庫一共有16個節點,分別是
本篇文章我就給大家多講解幾個節點的使用與配置。
首先我們要了解dashboard這個庫,
庫的介紹,https://flows.nodered.org/node/node-red-dashboard
庫的github源碼 https://github.com/node-red/node-red-dashboard
目前899個star,還是挺不錯的。
dashboard的布局可以看做是一個網格布局,每一個group(組),都有一個默認的寬度,6個單位(每個單位48px,并且6px的間隔)
每一個部件都必須存在于一個group中,這里的部件其實就是指一個UI元素,像按鈕,輸入框,選擇框,數字滑塊。每一個部件的寬度默認是auto.這意味著它將布滿整個group,并且會自適應單位。
給定一個寬度為6的組,如果你添加六個小部件,每個小部件的寬度為2,則它們將分兩行布置-每行三個小部件。
如果你添加兩組寬度6,只要你的瀏覽器窗口足夠寬,它們就會并排放置。如果縮小瀏覽器,則某一列中的第二組有時會移到第一組之下。
建議盡可能使用多個組,而不是一個大組,以便頁面可以在較小的屏幕上動態調整大小。
在布局中,最大的布局單位是tab,以下是group,然后是部件 widget
你可以在右上角點擊 一個柱形圖的圖表來查看dashboard的操作面板
site配置
主題色配置
可以對主題進行自定義
Style選中Custom,就可以選擇自定義的顏色。
關于圖標,dashboard內置了四套圖標。
分別是
如圖配置了所有的UI組件到流中,
UI組件只要不涉及到數據的流轉,那就可以不用連線,依然可以顯示到頁面上。
上面的流配置 顯示的頁面是這樣子的
由于group的默認是6個單位,所以會有點小。我們可以點擊這里進行調整寬度
調整后的效果圖
沒有那么小了,會稍微好看很多。
最后再給大家看一下dashboard支持的圖標庫吧。
angular-material-icons https://klarsys.github.io/angular-material-icons/
Font Awesome 4.7 https://fontawesome.com/v4.7.0/icons/
Weather Icons Lite https://github.com/Paul-Reed/weather-icons-lite/blob/master/css_mappings.md
[Material Design Iconfont](https://jossef.github.io/material-design-icons-iconfont/) 
*請認真填寫需求信息,我們會在24小時內與您取得聯系。