讀軟體設計的要素03概念的組合

躺柒發表於2024-09-07

1. 概念的組合

1.1. 概念不像程式那樣,可以用較大的包含較小的

  • 1.1.1. 每個概念對使用者來說都是平等的,軟體或系統就是一組串聯執行的概念組合

1.2. 概念是透過操作來同步組合的

  • 1.2.1. 同步並不增加新的概念操作,但會限制已有的操作,從而消除一些獨立概念可能會出現的操作序列

1.3. 在自由組合中,概念彼此獨立,僅受一些記錄的約束,這些約束是為了確保概念對事物觀點的一致性

1.4. 在合作組合中,概念共同工作,透過自動化提供新的功能

1.5. 在協同組合中,概念更加緊密地交織在一起,一些概念可以幫助另一些概念實現目的

1.6. 概念的組合為創造性設計提供了機會,即使其中的每個概念都是通用概念

  • 1.6.1. 協同組合常常是設計的精髓,簡單元件的組合可以帶來意想不到的力量

1.7. 同步是軟體設計的重要組成部分

1.8. 全新的組合形式

  • 1.8.1. 在預設情況下,概念彼此是獨立的

  • 1.8.1.1. 只要概念允許,可以採用任何順序呼叫概念的操作

  • 1.8.2. 自動化並不能完成以前手動無法完成的事情,而只能自動完成那些不可避免的事情

2. 自由組合

2.1. 自由組合是最鬆散的組合形式,在這種組合中,概念被合併到一個軟體中,但在大多數情況下每個概念依然獨立執行

2.2. 標籤概念

  • 2.2.1. 將標籤與專案關聯起來,幷包含了一個查詢(find)的操作,允許使用者篩選帶有給定標籤的所有專案

  • 2.2.2. 在實踐中,待辦與標籤概念可以提供更豐富的功能

2.3. 在自由組合中,概念在很大程度上是相互獨立的,但仍然需要做一些記錄,以排除一些無意義的操作

2.4. 同步並不會增加新的操作

  • 2.4.1. 同步只是清除了一些操作

  • 2.4.2. 同步的目的是確保從每個概念的角度來看都存在相同的一組事物,即標籤概念不能引用待辦概念中不存在的任務,也就是說這些概念是存在耦合的

2.5. 在自由組合中,軟體通常由正交的概念組合而成,每個概念都有自己的功能,同步僅用於記錄

3. 合作組合

3.1. 合作組合是更緊密的組合形式,能將多個概念連線在一起,提供兩個概念本身都沒有的新功能

3.2. 日誌(Logging)

  • 3.2.1. 這是一個跟蹤事件的概念,可以與其他概念合作組合使用

  • 3.2.2. 跟蹤的目的可以是診斷故障,透過留存事件序列,在事故發生後分析導致故障的原因

  • 3.2.2.1. 可以是效能分析,檢查服務的響應效能

  • 3.2.2.2. 可以是行為解析,收集服務中的使用者資料及其行為模式

  • 3.2.2.3. 可以是入侵檢測,根據請求模式,檢測可能正在進行的攻擊

  • 3.2.2.4. 可以是審計,例如記錄醫院中哪些員工訪問了健康記錄

3.3. 限制(Suppression)

  • 3.3.1. 訪問限制的概念可以透過同步授權操作與被授權的行為,防止產生未經授權的使用者操作

  • 3.3.1.1. 如果授權操作(由訪問限制確定)沒有發生,與之相關的操作也不會發生

  • 3.3.1.2. 在社交媒體軟體中將朋友概念與帖子概念組合在一起,那麼使用者就只能閱讀朋友的帖子

3.4. 分段(Staging)

  • 3.4.1. 可以將不同階段的操作聯絡在一起

3.5. 通知(Notification)

  • 3.5.1. 大多數軟體和服務都會向使用者傳送通知

  • 3.5.1.1. 日曆傳送日程提醒

  • 3.5.1.2. 論壇傳送註冊提醒

  • 3.5.1.3. 線上商店傳送購買確認

  • 3.5.1.4. 快遞公司傳送物流狀態更新

  • 3.5.1.5. 社交媒體軟體傳送更新提醒

3.6. 減輕(Mitigation)

  • 3.6.1. 有時自由組合給使用者提供了太多的自由度,導致了一些不良行為,這時就可以透過合作組合來減少不良行為

  • 3.6.2. 許多社交媒體平臺將帖子概念和投票概念組合,讓使用者對帖子進行評價

  • 3.6.2.1. 如果帖子概念允許編輯行為,則會產生一種困境,因為使用者可以在收到很多評價後,再完全更改帖子內容,讓人誤以為這些評價是針對新內容的

  • 3.6.2.2. 一種常見的解決方法是為已編輯的帖子新增一個永久的標記

  • 3.6.2.3. 另一種方法是將帖子概念中的編輯操作與另一個撤銷評價的操作同步

3.7. 推理(Inference)

  • 3.7.1. 有時使用者並不直接執行某些操作,而是透過其他操作間接執行

  • 3.7.2. 大多數通訊軟體會區分已讀和未讀專案,並允許使用者切換它們的狀態

3.8. 連線分離的關注點(Bridging separated concerns)

  • 3.8.1. 採用自由組合的方式將關注點分離,通常會提高軟體中概念的清晰度和可用性

  • 3.8.2. 蜂窩概念和WiFi概念允許使用者獨立管理蜂窩資料和本地網路的使用,以及管理使用這些資料和網路的軟體

3.9. 在合作組合中,同步在提供自動化的概念間建立連線,從而產生一些單個概念不具備的新功能

4. 協同組合

4.1. 協同組合更精妙

  • 4.1.1. 在自動化間建立連線

  • 4.1.2. 透過更緊密的同步概念,一個概念的功能會增強另一個概念的功能

  • 4.1.3. 組合的整體價值超過了概念價值的總和

4.2. Gmail標籤和廢紙簍

4.3. Moira列表和組

4.4. 免費樣品和購物車

4.5. Photoshop的通道、蒙版和選區

4.6. 廢紙簍與資料夾的美妙協同

  • 4.6.1. 最初,廢紙簍只是一個已刪除檔案的集合,如果你刪除了一個資料夾,資料夾中的檔案將零散地位於廢紙簍中

  • 4.6.2. 現在的廢紙簍設計可以理解為由廢紙簍和資料夾這兩個顯著概念構成的巧妙組合

  • 4.6.3. 廢紙簍概念的基本思路是,恢復已刪除檔案,或透過清空廢紙簍永久刪除它們

4.7. 難以完美的協同

  • 4.7.1. 完美實現不同概念的功能協同幾乎是不可能的,因此大多數協同都需要付出一些代價

5. 同步

5.1. 在開始設計概念時,同步是整個軟體設計的重要部分

  • 5.1.1. 同步太多會使使用者失去控制權,一些概念的自由組合允許的場景可能不會出現

  • 5.1.2. 如果同步太少,一些本可以自動完成的工作卻成為使用者的負擔,有時還會帶來意外和不當行為,甚至是災難性的後果

5.2. 同步過度

  • 5.2.1. 日曆軟體的最初設計卻因為“刪除邀請”而給使用者帶來了困擾

  • 5.2.1.1. 使用者無法在不通知事件發起者的情況下拒絕事件,因為刪除概念與拒絕概念是繫結的

  • 5.2.1.2. 如果你只是想清理日曆的空間,這一設計可能會讓你冒犯朋友

  • 5.2.1.3. 如果向你傳送事件邀請的是垃圾郵件,情況會更糟

  • 5.2.1.4. 解決這個問題的唯一笨辦法是再建立一個新日曆,將事件移至其中,然後再將新日曆中的事件全部刪除

  • 5.2.2. Tumblr的不良設計

  • 5.2.3. Twitter的回覆

  • 5.2.4. 不需要的谷歌同步

  • 5.2.5. 愛普生強橫的印表機驅動程式

5.3. 同步不足

  • 5.3.1. 該小組是否可以出現在組目錄(Group directory)中取決於另一個設定選單

  • 5.3.1.1. 除非此小組的可見性設定為“網路上的任何人”(Anyone on the web),否則該小組不僅被排除在組目錄之外,而且使用者根本無法訪問該組,甚至無法申請加入該小組

  • 5.3.1.2. 原因是,許可權概念中確定誰可以申請加入的操作與組概念中設定可見性的操作缺乏同步

  • 5.3.2. Lightroom的匯入功能

  • 5.3.3. Google Forms、Google Sheets和資料視覺化

  • 5.3.4. Zoom的舉手功能

  • 5.3.5. Therac-25放射治療機

相關文章