讀軟體設計的要素05概念的特性

来源:https://www.cnblogs.com/lying7/p/18402197
-Advertisement-
Play Games

1. 概念的特性 1.1. 專一性原則(specificity principle)認為概念與目的應該一一對應 1.1.1. 專一性原則已被證明是概念設計中最有用的原則之一 1.1.2. 一個概念最多只能滿足一個目的 1.2. 很少有沒有目的的概念 1.2.1. 如果本應隱藏的用戶機制被暴露,可能會 ...


1. 概念的特性

1.1. 專一性原則(specificity principle)認為概念與目的應該一一對應

  • 1.1.1. 專一性原則已被證明是概念設計中最有用的原則之一

  • 1.1.2. 一個概念最多只能滿足一個目的

1.2. 很少有沒有目的的概念

  • 1.2.1. 如果本應隱藏的用戶機制被暴露,可能會產生沒有目的的概念

  • 1.2.2. 無目的的概念會擾亂界面並迷惑用戶

  • 1.2.3. 無目的的概念是奇怪的

1.3. 沒有概念來實現目的可能是因為設計者領域之外的限制,有時或許只是因為嚴重的疏漏

  • 1.3.1. 概念缺失則會導致更為複雜的交互

1.4. 概念冗餘,即多個概念服務於同一目的,會導致用戶困惑與資源浪費

  • 1.4.1. 概念冗餘在兩個本應相同的概念之間引入了令人困惑的區別,並迫使用戶用不同的方法來做相同的事情

  • 1.4.2. 概念冗餘通常是由於在概念設計時只考慮了某些特定情況(可能是由子團隊負責開發)​,而沒有對軟體的核心概念給予足夠關註

  • 1.4.3. 每個目的都應該通過最多一個概念來實現並避免概念冗餘

  • 1.4.4. 避免概念冗餘當然也是合理的,因為可以節省精力

1.5. 概念過載,即一個概念具有多個目的

  • 1.5.1. 錯誤聚合,設計者錯誤地將多個目的當成一個目的

  • 1.5.2. 目的被拒,即設計者有意忽略用戶目的

  • 1.5.3. 突發目的,概念隨著時間的推移演變出新的(通常是不相容的)目的

  • 1.5.4. 搭載現象,即設計者試圖將新目的掛靠在舊概念上,以便減少設計和實現工作

  • 1.5.5. 概念過載會由於不相關目的的耦合而引入額外的複雜性

  • 1.5.6. 概念過載會導致功能受限,因為第二個目的被強加到原有概念之上

1.6. 導致軟體複雜性的增加和清晰度的降低

1.7. 一致性原則有助於確認有多個組成部分的目的究竟算一個目的還是多個目的、是否可能整合為一個單一目的,各部分是否有共同的利益相關者、它們是否為一個共同的使命服務,以及它們之間是否有衝突

1.8. 在軟體設計中,概念和目的應該一一對應

  • 1.8.1. 每個概念都應該有一個激發它的目的

  • 1.8.2. 軟體的每一個目的也都應該有一個完整的概念

2. 無概念的目的

2.1. 如果對設計進行審視,你可能會發現有些基本目的並沒有與之對應的概念來實現

2.2. 所有軟體都會隨著時間的推移而發展,新的需求總會出現

2.3. 設計之初就明顯缺少概念的目的

2.4. 通信人概念

  • 2.4.1. 大多數電子郵件客戶端都缺少通信人概念,該概念用於識別郵件的發件人和收件人

  • 2.4.2. Gmail這樣的封閉電子郵件系統很容易實現通信人概念,但要想在更廣泛的範圍內實現這個概念,則需要通用的身份驗證作為基礎

  • 2.4.3. 有了通信人概念,電子郵件的發件人欄位就無法被偽造,垃圾郵件也將更容易受到控制

2.5. 備份中的刪除警告

  • 2.5.1. 從電腦中刪除的文件會在一段時間(比如30天)之後從備份中被刪除

  • 2.5.2. 意圖很明確:阻止客戶將備份服務當作無限期的雲存儲

  • 2.5.3. 備份軟體可以提供一個概念來跟蹤刪除操作,併在刪除操作發生時給出警告,這樣就可以確定用戶是否有意刪除,以免在他們還沒註意到之前就從備份中刪除了文件

2.6. 缺少樣式概念

  • 2.6.1. 一個概念在某一類軟體中經常使用,但在另一類軟體中卻常常不可用,即使這個概念對於後者而言也非常有用

2.7. 不完整的模板概念

  • 2.7.1. 由於軟體的形式有限,導致這個概念的常規目的無法實現

  • 2.7.2. 解耦設計的關鍵是網站製作者不需要一開始就確定模板,而是可以先試著加入一些內容,然後看看內容在模板里看起來如何

2.8. 隨著技術的普及,人們很容易認為軟體設計中所有的核心問題都已經解決了

  • 2.8.1. 這些沒有概念的目的表明,即使在人們最熟悉的軟體中,還有一些最基本的需求沒有得到滿足,軟體設計師仍然有重要的工作要做

3. 概念冗餘

3.1. 如果存在另一個用於相同目的的概念,那麼當前的概念就是冗餘的

  • 3.1.1. 設計師最初看到了兩個截然不同的目的,但最終卻發現它們只是同一個更通用目的的變體

3.2. Gmail的分類概念

  • 3.2.1. 分類概念遭到否定的根本原因在於它是冗餘的

3.3. Zoom廣播

  • 3.3.1. 廣播概念是一個冗餘概念

  • 3.3.2. 聊天概念和廣播概念似乎具有相同的目的,但又不盡相同

  • 3.3.2.1. 廣播消息在屏幕上閃過,而聊天消息則出現在滾動的消息記錄中

  • 3.3.2.2. 廣播消息可以跨越會議室,聊天消息則不能

  • 3.3.2.3. 廣播消息會很快消失,聊天消息則會保留在消息記錄中

  • 3.3.2.4. 在理想情況下,聊天概念應該包含這兩個概念的特性

3.4. 消除概念冗餘將減少開發人員的工作,併為用戶提供更簡單、更強大的工具

4. 概念過載

4.1. 最有趣的軟體設計原則是一個概念最多只能有一個目的

4.2. 一個概念不能很好地滿足兩個目的

  • 4.2.1. 目的指導著概念設計的各個方面

  • 4.2.2. 如果軟體有兩個不同的目的,它們必然會向不同的方向發展,而概念設計也必須在它們之間做出妥協

  • 4.2.3. 更有可能的是,這種設計最終連一個目的也無法完全滿足,因為這個目的本來朝著一個方向發展,卻被拉向另一個方向

4.3. 錯誤聚合(False convergence)

  • 4.3.1. 錯誤聚合是指一個概念針對兩個不同的功能,而這兩個功能被錯誤地假設為具有相同的目的

  • 4.3.2. Facebook的好友概念

  • 4.3.2.1. 允許兩個用戶建立一種關係,在這種關係中他們可以看到彼此的帖子

  • 4.3.2.2. 隱藏了兩個截然不同的目的

>  4.3.2.2.1. 過濾:通過展示好友的帖子,Facebook為用戶省去了親自篩選帖子的麻煩

>  4.3.2.2.2. 訪問控制:通過選擇好友,用戶可以選擇誰可以看到自己的帖子
  • 4.3.2.3. 2011年增加了關註概念,只用於過濾帖子,而非訪問控制

4.4. 被拒目的(Denied purposes)

  • 4.4.1. 被拒目的是指被設計者忽略的目的,儘管用戶有相應的需求

  • 4.4.2. 列出候選目的然後將之否定通常是令人欽佩的,這是防止軟體設計膨脹的關鍵策略

  • 4.4.3. 最有效的箴言是“設計最簡單的東西”​,這既適用於選擇要達到的目的,也適用於設計實現這些目的的概念

  • 4.4.4. 以保持用戶界面的簡單性為名忽視用戶需求,進而否定一個目的,這也可能是一種武斷的行為

  • 4.4.5. Twitter中的收藏概念

4.5. 突發目的(Emergent purposes)

  • 4.5.1. 突發目的是原有舊概念新產生的目的,通常由用戶自己創造

  • 4.5.2. 一個概念在設計時可能只有一個單一的、引人註意的目的,但隨著用戶發現該概念的新用途,其他目的可能會出現

  • 4.5.3. 電子郵件的主題行概念

4.6. 搭載(Piggybacking)

  • 4.6.1. 搭載現象指現有概念被調整或擴展以適應新目的

  • 4.6.2. 導致概念過載最常見的原因是,設計師看到了使用現有概念來支持新目的的可能,因此沒有設計新概念,省去了設計和實現新概念的麻煩

  • 4.6.2.1. 設計師也可能認為用戶會欣賞概念更少、內涵卻更豐富帶來的經濟性,但這通常是錯誤的

  • 4.6.2.2. 相比於數量較少但是複雜和令人困惑的概念,較多但統一、有說服力的概念更好

  • 4.6.3. 富士相機的長寬比

  • 4.6.3.1. 長寬比概念在RAW格式的文件上非常有效

  • 4.6.3.2. 由於長寬比概念通過重載與JPEG格式相關聯導致過載,因此不能單獨將之用於JPEG格式

  • 4.6.3.3. 即使你只想以RAW格式保存圖像,並且自定義長寬比,在設置圖像質量時也必須選擇同時包含RAW和JPEG格式的文件,然後再刪除JPEG文件

  • 4.6.3.4. 補救方法是提供一個與圖像大小概念不同的長寬比概念,使自定義長寬比的操作與選擇文件類型的操作相互獨立

4.7. 補救方法

  • 4.7.1. 儘可能準確地闡明單一目的,並檢查概念的不同動機是否真正反映了同一目的,這樣可以避免錯誤聚合

  • 4.7.2. 認真對待用戶的意見和經驗,特別是那些技術水平較低和較不願意採用新技術的用戶,這樣可以避免出現被拒目的

  • 4.7.3. 突發目的是最難避免的,因為沒有人能夠預測設計將以何種方式影響其使用場景並創造新的用途

  • 4.7.3.1. 只要意識到突發目的的出現,就可以添加新概念來解決這種概念過載

  • 4.7.4. 應該避免將概念用於相互矛盾的目的來優化設計的衝動,應認識到這樣節省下來的努力會導致情況更加複雜,最終付出高昂的代價

  • 4.7.4.1. 避免出現搭載現象

5. 目的的顆粒度和一致性原則

5.1. 設計是否冗餘或過載取決於目的

5.2. 需要通過一致性測試,揭示多重目的偽裝成一個目的的情況

5.3. 在理想情況下,目的的設定不應該隨案例不同而變化,也就是說,目的需要保持一致

5.4. 重新設定目的

5.5. 共同的利益相關者

5.6. 共同使命

5.7. 無衝突

6. 分解概念

6.1. 解決概念過載的方法是分解概念,然後為每個目的建立一個新的概念

6.2. 回應概念,其目的是傳遞對帖子的情緒反應

6.3. 推薦概念,其目的是管理推送內容

6.4. 特征分析(profiling),其目的是定向投放廣告

6.5. 極端情況是,這三個概念可能構成一個幾乎完全不同步的自由組合

6.6. 另一個極端情況是,三個概念完全同步,回應按鍵也作用於推薦和特征分析

  • 6.6.1. 過載問題已經轉化為過度同步問題

  • 6.6.2. 至少在概念分離的情況下,設計中有更清楚的跡象表明這些概念已經耦合在一起,並且即使試圖在相互衝突的不同目的之間尋求平衡,概念本身被破壞的風險也比較小

6.7. 概念分解之所以很有價值,在很大程度上是因為它允許將一個特殊的概念(比如Facebook的點贊概念)分解成更一致、更通用的概念,從而為用戶提供更簡明的體驗,併為記錄和保存設計知識提供更好的結構


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • title: 使用 nuxi info 查看 Nuxt 項目詳細信息 date: 2024/9/5 updated: 2024/9/5 author: cmdragon excerpt: 摘要:文章介紹了nuxi info命令的使用方法,這是一個Nuxt.js命令行工具,用於查看當前或指定Nuxt項 ...
  • 第一步:安裝 npm 使用以下命令安裝npm install vue-grid-layout --save yarn 使用以下命令安裝yarn add vue-grid-layout 第二步:配置全局變數 import { createApp } from 'vue' import App from ...
  • 前言 前端導出表格有很多種方案,但是表格樣式一旦複雜了,那麼就得用代碼寫excel的樣式,還是比較麻煩的。每次樣式不一樣,就得重新寫,這時使用表格模板的優勢就體現出來了,想導出不同樣式的表格直接修改表格模板即可。 方案 我找了兩種方案: 1、使用xlsx-template,利用模板語法在xlsx中占 ...
  • 前言 vue3中想要訪問DOM和子組件可以使用ref進行模版引用,但是這個ref有一些讓人迷惑的地方。比如定義的ref變數到底是一個響應式數據還是DOM元素?還有template中ref屬性的值明明是一個字元串,比如ref="inputEl",怎麼就和script中同名的inputEl變數綁到一塊了 ...
  • 基於electron32+vue3 setup+pinia2桌面端os管理解決方案ElectronVue3OS。 vue3-electron32-os全新原創Electron32+Vite5+Vue3+Pinia2+ArcoDesign+Echarts+Swiper搭建桌面版os管理模板。內置mac ...
  • title: 使用 nuxi generate 進行預渲染和部署 date: 2024/9/4 updated: 2024/9/4 author: cmdragon excerpt: 通過 nuxi generate 命令,你可以輕鬆地將 Nuxt 應用程式預渲染為靜態 HTML 文件,並將其部署到 ...
  • title: 探索 Nuxt Devtools:功能全面指南 date: 2024/9/3 updated: 2024/9/3 author: cmdragon excerpt: 摘要:本文介紹了Nuxt Devtools的功能和使用方法,包括自動安裝、手動安裝和各項主要功能,如頁面、組件、構建分析 ...
  • Angular 的路由復用策略(RouteReuseStrategy)是一種用於優化路由跳轉性能和提高用戶體驗的機制。通過實現RouteReuseStrategy介面,後可以自定義路由的復用行為,避免不必要的組件銷毀和重建,同時保持組件的狀態。 以下是對Angular路由復用策略的詳細介紹: 一、基 ...
一周排行
    -Advertisement-
    Play Games
  • 示例項目結構 在 Visual Studio 中創建一個 WinForms 應用程式後,項目結構如下所示: MyWinFormsApp/ │ ├───Properties/ │ └───Settings.settings │ ├───bin/ │ ├───Debug/ │ └───Release/ ...
  • [STAThread] 特性用於需要與 COM 組件交互的應用程式,尤其是依賴單線程模型(如 Windows Forms 應用程式)的組件。在 STA 模式下,線程擁有自己的消息迴圈,這對於處理用戶界面和某些 COM 組件是必要的。 [STAThread] static void Main(stri ...
  • 在WinForm中使用全局異常捕獲處理 在WinForm應用程式中,全局異常捕獲是確保程式穩定性的關鍵。通過在Program類的Main方法中設置全局異常處理,可以有效地捕獲並處理未預見的異常,從而避免程式崩潰。 註冊全局異常事件 [STAThread] static void Main() { / ...
  • 前言 給大家推薦一款開源的 Winform 控制項庫,可以幫助我們開發更加美觀、漂亮的 WinForm 界面。 項目介紹 SunnyUI.NET 是一個基於 .NET Framework 4.0+、.NET 6、.NET 7 和 .NET 8 的 WinForm 開源控制項庫,同時也提供了工具類庫、擴展 ...
  • 說明 該文章是屬於OverallAuth2.0系列文章,每周更新一篇該系列文章(從0到1完成系統開發)。 該系統文章,我會儘量說的非常詳細,做到不管新手、老手都能看懂。 說明:OverallAuth2.0 是一個簡單、易懂、功能強大的許可權+可視化流程管理系統。 有興趣的朋友,請關註我吧(*^▽^*) ...
  • 一、下載安裝 1.下載git 必須先下載並安裝git,再TortoiseGit下載安裝 git安裝參考教程:https://blog.csdn.net/mukes/article/details/115693833 2.TortoiseGit下載與安裝 TortoiseGit,Git客戶端,32/6 ...
  • 前言 在項目開發過程中,理解數據結構和演算法如同掌握蓋房子的秘訣。演算法不僅能幫助我們編寫高效、優質的代碼,還能解決項目中遇到的各種難題。 給大家推薦一個支持C#的開源免費、新手友好的數據結構與演算法入門教程:Hello演算法。 項目介紹 《Hello Algo》是一本開源免費、新手友好的數據結構與演算法入門 ...
  • 1.生成單個Proto.bat內容 @rem Copyright 2016, Google Inc. @rem All rights reserved. @rem @rem Redistribution and use in source and binary forms, with or with ...
  • 一:背景 1. 講故事 前段時間有位朋友找到我,說他的窗體程式在客戶這邊出現了卡死,讓我幫忙看下怎麼回事?dump也生成了,既然有dump了那就上 windbg 分析吧。 二:WinDbg 分析 1. 為什麼會卡死 窗體程式的卡死,入口門檻很低,後續往下分析就不一定了,不管怎麼說先用 !clrsta ...
  • 前言 人工智慧時代,人臉識別技術已成為安全驗證、身份識別和用戶交互的關鍵工具。 給大家推薦一款.NET 開源提供了強大的人臉識別 API,工具不僅易於集成,還具備高效處理能力。 本文將介紹一款如何利用這些API,為我們的項目添加智能識別的亮點。 項目介紹 GitHub 上擁有 1.2k 星標的 C# ...