軟體架構強調的是整體,而整體性的設計決策必須基於對需求的全面認識;
軟體架構應該是穩定的,而遺漏了重要需求的架構設計面臨的是返工的命運。
一言以蔽之,全面認識需求,是生產出高質量軟體所必須的「第一項修煉」。
作為乙個軟體架構師,也不應對所有需求「鬍子眉毛一把抓」,而是應全面認識需求——分門別類地將需求梳理清楚。
下圖所展示的「需求空間分割圖」揭示了全面認識需求的要求。要全面認識需求,意味著我們必須從不同級別來考察需求:組織級、使用者級、開發級,還要對每個級別考慮不同型別的需求:功能需求、質量屬性、約束。
一方面,需求是分層次的。乙個成功的軟體系統,對客戶高層而言能夠幫助他們達到業務目標,這些目標就是客戶高層眼中的需求;對實際使用系統的終端使用者而言,系統提供的能力能夠輔助他們完成日常工作,這些能力就是終端使用者眼中的需求;對開發者而言,有著更多使用者沒有覺察到的「需求」要實現……
關注需求層次的實踐意義在於,在需求之間建立起「可跟蹤性」,避免因遺漏需求而造成軟體「達不到要求」,也避免開發人員一廂情願地為使用者「製造」沒有實際意義的無用功能。理解了需求分層的道理,軟體人員在聽到客戶方的老闆說「需求就是我希望這套軟體能幫我賺更多的錢」時,就不會覺得好笑了,因為他知道這可能就是建立這套軟體系統的商業目標,並會對其他需求和設計產生影響。
另一方面,需求應該被分為不同的型別。例如,乙個網上書店系統的功能需求可能包括「瀏覽書目」、「下訂單」、「跟蹤訂單狀態」、「為書籍打分」等,質量屬性需求包括「互操作性」和「安全性」等,而「必須執行於linux平台之上」屬於約束性需求之列。實踐一再表明,忽視質量屬性和約束性需求,常常導致架構設計最終失敗。
總之,通過需求分類,將有助於全面認識需求、分門別類地把握需求、設計出高質量的軟體架構。
全面認識需求還有一層含義,那就是應當在深思熟慮之後做出合適的需求權衡和取捨。一方面,眾多質量屬性需求之間往往會有衝突,我們必須權衡。另一方面,如果通過複雜設計所支援的變化根本不會發生,那麼這種過度設計(overengineering)就造成了資源的浪費並增加了開發難度。有人主張不要**未來,本書並不同意,本書認為應當有依據地支援未來變化,對變化的判斷應該來自對需求及需求背景的深刻把握。
橫切豎割話需求
軟體架構強調的是整體,而整體性的設計決策必須基於對需求的全面認識 軟體架構應該是穩定的,而遺漏了重要需求的架構設計面臨的是返工的命運。一言以蔽之,全面認識需求,是生產出高質量軟體所必須的 第一項修煉 作為乙個軟體架構師,也不應對所有需求 鬍子眉毛一把抓 而是應全面認識需求 分門別類地將需求梳理清楚。...
資料表的橫切與豎切 許可權原因
乙份物理表,不同許可權的人,看到的內容應是不同的.有時,是要看到的行不同,例如不同部門之間的人事資料,a部門只能看自己部門的資料.有時,是要看到的列不同,如單價金額之類的敏感資料,不能對無關的人員開放.處理方法 橫切 行 取標誌行,如部門編號,做為where子句的條件,寫進基礎檢視,這樣不論如何查詢...