《高級軟件架構師講義》學習筆記5

?第五章???? 設計模式與軟件架構設計

?

一、面向對象軟件架構設計思想

a)???????? 面向對象范式

?????????????????????????? i.????? 面向對象范式的核心是“對象”的概念

???????????????????????? ii.????? 所有的東西都聚焦于對象

??????????????????????? iii.????? 圍繞對象-而非函數-組織代碼

b)??????? 對象從不同視角觀察

???????????????????????? i.??????? 概念層:一個對象是一系列責任

?????????????????????? ii.??????? 規格層:一個對象是一系列可以被其他對象或該對象自己調用的方法

????????????????????? iii.??????? 實現層:一個對象是一些代碼和數據

c)??????? 設計原則

???????????????????????? i.??????? “開閉”原則(OCP)

?????????????????????? ii.??????? 里氏代換原則(LSP)

????????????????????? iii.??????? 依賴倒轉原則(DIP)

???????????????????? iv.??????? 接口隔離原則(ISP)

?????????????????????? v.??????? 組合/聚合復用原則(CARP)

???????????????????? vi.??????? 迪米特法則(LoD)

二、使用UML進行軟件架構設計

a)???????? 最小UML建模技術

???????????????????????? i.??????? 對于大多數問題而言,只需使用20%UML,就可以完成80%的建模工作。

?????????????????????? ii.??????? 實際中,好像總是沒有足夠的時間來完成建模、分析和設計工作,總是過早地進入到編碼階段。

????????????????????? iii.??????? 足以很好地完成軟件項目工作所需的、最小的UML和建模技術子集。

b)??????? 類圖規定了代碼的結構

c)??????? 時序圖將操作分配給類

d)???????

?

三、設計模式的本質論

a)???????? 模式是從解決具體問題抽象出來的,這種具體問題在特定的上下文中重復出現。也就是說,每個具體形式都對一種重復的問題采用重復的解決方案。

b)??????? 理解設計模式的結果和代價

???????????????????????? i.????????????? 對象過多:設計模式的精髓之一是將可變部分封裝為對象,帶來的好處是系統更加靈活,易于維護,但也大量增加了對象。如果不恰當地使用設計模式,會使系統難以調試。

1.???????? 命令模式:將行為封裝為對象,這樣原來一個對象中的若干方法變成了若干命令對象。如果將命令模式應用在一個GUI用戶界面上,每一個菜單項就要生成一個命令對象,原來由一個對象完成的工作現在可能需要十幾個對象來完成。

2.???????? 狀態模式:將不同的狀態封裝為對象,原來可能是通過判斷語句完成的工作分散到各個對象中完成。由于狀態是動態決定的,因此在設計測試用例時有難度。

?????????????????????? ii.????????????? 更復雜的裝配關系:很多設計模式依賴對象之間的關系,因此在初始化時需要執行相應的裝配工作,需要裝配對象的模式有如下幾種。

1.???????? 生成器模式:需要裝配生成器和導航器。

2.???????? 橋接模式:需要將代表邏輯的對象和代表實現的對象進行裝配。

3.???????? 觀察者模式:需要將不同的觀察者對象關聯在一起。

4.???????? 職責鏈模式:需要組裝整條職責鏈。

????????????????????? iii.????????????? 測試難度加大:這是前面兩個結果導致的,由于對象的增多和對象間關系的復雜,因此測試用例的設計難度增大。特別是很多邏輯上的錯誤可能由裝配關系不當造成,并且在編譯時很難發現。解決測試難度大的方法是將測試用例文檔化,即繪制測試用例的對象圖。這個話題超出了本書的范圍,有興趣的讀者可參考相關書籍。

???????????????????? iv.????????????? 程序結構復雜:設計模式關注的是如何使軟件更具可維護性,因此從結構上已經與原始的需求完全不同。加上很多功能是通過對象的動態組合實現的,程序的動態結構變得與靜態結

?????????????????????? v.????????????? 構同樣重要。從單純的靜態結構(例如類圖)已經很難理解實現的方式和最終的意圖了,這也是經常是使用設計模式的代價之一。

c)??????? 設計模式不能做什么

???????????????????????? i.????????????? 設計模式不是法則

模式理論的精髓之一就是模式的使用是有前提和代價的,模式是在某種前提下,綜合各方面因素后考慮得出的結果。即在使用模式時總是要付出一定的代價,當然這種代價是可以接受的。如果某個模式在所有場合中的使用都是必然的,那么它就不能叫做模式了,而是一種必

須遵守的法則。例如“面向接口,而非實現編程”,是法則而非模式。

?????????????????????? ii.????????????? 不能提高開發速度或者形象開發速度

? 如果以一個開發周期作為考核標準,恐怕沒有人會使用設計模式。設計模式并不能提高目前的開發速度,至少其關注的目標并不是開發速度。很多情況下甚至會降低開發速度,即使是正確地選擇了設計模式。

? 這是因為設計模式可能會引入更多的對象和更復雜的對象裝配關系,從而使得程序有更多的動態狀態,從局部看來變得結構復雜,難以理解并且測試困難。如果僅僅關注于形象進度,或者能夠百分之百地確定需求沒有變化,那么設計模式并不是很好的選擇。

????????????????????? iii.????????????? 不是萬能的

?設計模式的使用是自然而然的事情,很多情況下不使用設計模式是因為不需要,問題還沒有復雜到非用不可的程度。我們是為了設計而使用設計模式,而不是為了使用設計模式而設計。

? 當你的項目發現有如下問題之一時,就需要考慮重構代碼,可能會有某種模式適合。

? (1)代碼無法進行單元測試。

? (2)需求的變動總是導致代碼的變動。

? (3)有重復代碼存在。

? (4)繼承層次過多。

? (5)隱藏的依賴過多。

四、設計模式與架構模式

a)???????? 主要架構模式

???????????????????????? i.????????????? 流程處理模式

?????????????????????? ii.????????????? 客戶/服務器模式、

????????????????????? iii.????????????? 模型—視圖—控制器模式(MVC)

???????????????????? iv.????????????? 分層模式

b)??????? 確立軟件架構考慮的因素

???????????????????????? i.????????????? 架構中包的數量

?????????????????????? ii.????????????? 架構中包之間的耦合度

????????????????????? iii.????????????? 軟件元素的穩定性

???????????????????? iv.????????????? 軟件元素的分類

?????????????????????? v.????????????? 作為軟件系統運行環境的物理網絡拓樸

???????????????????? vi.????????????? 軟件元素的安全、保密級別

??????????????????? vii.????????????? 開發團隊的技術專長

????????????????? viii.????????????? 調整軟件架構,支持并行開發

這里之后才了解MVC模式與GOF那些設計模式有什么區別,
MVC模式屬于架構模式,特別適合應用于分布式應用系統。
大型軟件的頂層架構往往需要使用多種架構樣式。如,整個目標軟件系統采用分層結構,在系統的不同層次內再分別使用適宜的其他類型的架構模式。

?

轉載于:https://www.cnblogs.com/leandro/archive/2009/01/18/1372303.html

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

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

相關文章

python 安裝xpath_Python網絡爬蟲(四)- XPath1.XPath2.XPath在python中的應用

目錄: 1.XPath XPath即為XML路徑語言(XML Path Language),它是一種用來確定XML文檔中某部分位置的語言。它使用路徑表達式來選取 XML 文檔中的節點或節點集。節點是通過沿著路徑 (path) 或者步 (steps) 來選取的。 XPath語法 2.XP…

團隊升級

2019獨角獸企業重金招聘Python工程師標準>>> 轉載于:https://my.oschina.net/yulongblog/blog/2988702

設計模式簡介

深入理解面向對象 向下:深入理解三大面向對象機制 封裝,隱藏內部實現 繼承,復用現有代碼  多態,改寫對象行為 向上:深刻把握面向對象機制所帶來的抽象意義,理解如何使用這些機制來表達現實世界&#xff0c…

Css3: gradient背景漸變

Css3: gradient背景漸變 原文鏈接&#xff1a;http://kk073000.blog.163.com/blog/static/34826942012123111322691/ css3實現了背景漸變。 <gradient> [ <linear-gradient> | <radial-gradient> | <repeating-linear-gradient> | <repeating-r…

模板方法

重構的關鍵技法&#xff1a; 靜態 -> 動態 早綁定 -> 晚綁定 繼承 -> 組合 編譯時依賴 -> 運行時依賴 緊耦合 -> 松耦合 "組件協作"模式 現代軟件專業分工之后的第一個結果是“框架與應用程序的劃分”&#xff0c;“組件協作”模式通過晚期綁定&#…

聚類 python_python中實現k-means聚類算法詳解

算法優缺點&#xff1a; 優點&#xff1a;容易實現 缺點&#xff1a;可能收斂到局部最小值&#xff0c;在大規模數據集上收斂較慢 使用數據類型&#xff1a;數值型數據 算法思想 k-means算法實際上就是通過計算不同樣本間的距離來判斷他們的相近關系的&#xff0c;相近的就會放…

python筆試常見題

1、冒泡排序&#xff1a; 冒泡排序算是最基本的python算法了。也算python面試遇到問的最多的了。 如果是封裝成函數。代碼如下&#xff1a; 如果初始就一個字典。那么代碼為&#xff1a; 冒泡排序的本質就是兩兩比較。根據結果調換位置。最終達到一個排序的效果。 注&#xff1…

固定資產打開提示:上年度數據未結轉!

問題現象&#xff1a;固定資產打開提示&#xff1a;上年度數據未結轉&#xff01; 問題分析&#xff1a;服務器出問題后&#xff0c;數據庫UFSYSTEM丟失&#xff0c;重新建賬后年度數據覆蓋后出現的&#xff0c;那么問題應該出在UFSYSTEM庫UA_ACCOUNT_SUB表與年度庫Accinformat…

windows MySQL 5+ 服務手動安裝

MySQL 5 服務手動安裝的方法&#xff1a;運行cmd&#xff0c;進入mysql的安裝目錄&#xff1a; C:\Users\aministrator> D: D:\> cd MySQL Server 5.6\bin D:\MySQL Server 5.6\bin>在bin目錄中運行mysqld.exe -install命令&#xff0c;安裝不完成會有提示信息。#1、手…

Kotlin防止按鈕多次點擊

剛開始寫kotlin 這段代碼寫的可能有問題 望指正 object ViewClickDelay {var hash: Int 0var lastClickTime: Long 0var SPACE_TIME: Long 3000 }infix fun View.clickDelay(clickAction: () -> Unit) {this.setOnClickListener {if (this.hashCode() ! hash) {hash thi…

C#網絡編程(同步傳輸字符串) - Part.2

服務端客戶端通信 在與服務端的連接建立以后&#xff0c;我們就可以通過此連接來發送和接收數據。端口與端口之間以流&#xff08;Stream&#xff09;的形式傳輸數據&#xff0c;因為幾乎任何對象都可以保存到流中&#xff0c;所以實際上可以在客戶端與服務端之間傳輸任何類型的…

Factory Method工廠方法

“對象創建“模式 通過”對象創建“模式繞開new&#xff0c;來避免對象創建(new)過程中所導致的緊耦合&#xff08;以來具體類&#xff09;&#xff0c;從而支持對象創建的穩定。它是接口抽象之后的第一部工作。 典型模式&#xff1a;Factory Method&#xff0c;Abstract Facto…

centos 關閉防火墻_CentOS7操作系統下如何關閉防火墻

centos系統如果不關閉防火墻在使用中會遇到不少問題&#xff0c;而且centos7和centos6關閉防火墻的方式不一樣。centos6:1.永久性生效&#xff0c;重啟后不會復原開啟&#xff1a; chkconfig iptables on關閉&#xff1a; chkconfig iptables off2.即時生效&#xff0c;重啟后復…

web 網頁按比例顯示圖片 js

原文鏈接&#xff1a;http://blog.csdn.net/liqinghuiyx/article/details/5442349 在動態站點上經常需要上傳自己的圖片&#xff0c;而這些圖片的大小是未知的&#xff0c;在顯示成縮略圖的時候必須進行按比例的縮放才能美觀地顯示。以最近做的golf網站&#xff08;http://www…

黑馬C++設計模式1

設計模式的基礎是&#xff1a;多態。 設計模式綜覽表&#xff1a; 單例模式&#xff1a;是保證一個類僅有一個實例&#xff0c;并提供一個訪問它的全局訪問點。 簡單工廠模式&#xff1a;通過專門頂一個一個類來負責創建其它類的實例&#xff0c;被創建的實例通常都具有共同的父…

對于未來的一點思考

最近在思考一個問題&#xff1a;以后的發展路線。   自己算是走上了IT的道路&#xff0c;但現在也只是在程序員階段&#xff0c;當然還未畢業&#xff0c;以后的路還很長&#xff0c;但是這個問題確是現在或以后不得不面對的一個問題。  上學期未那兩個月&#xff0c;去了N…

深入解析react關于事件綁定this的四種方式

這篇文章主要介紹了詳解react關于事件綁定this的四種方式&#xff0c;寫的十分的全面細致&#xff0c;具有一定的參考價值&#xff0c;對此有需要的朋友可以參考學習下。如有不足之處&#xff0c;歡迎批評指正。 在react組件中&#xff0c;每個方法的上下文都會指向該組件的實例…

Apache的認證、授權、訪問控制

原文鏈接&#xff1a; http://man.chinaunix.net/newsoft/Apache2.2_chinese_manual/howto/auth.html Apache認證、授權、訪問控制 認證(Authentication)是指任何識別用戶身份的過程。授權(Authorization)是允許特定用戶訪問特定區域或信息的過程。 相關模塊和指令 認證和授權…

黑馬C++設計模式2

簡單工廠模式 //一般來說&#xff0c;自己創建一個對象的方法是在自己寫的業務函數中直接new一個對象出來//但是現實需求&#xff0c;我不想創建對象&#xff0c;我只想拿來用。&#xff08;創建類的步驟比較復雜&#xff09; //好處&#xff0c;1、客戶端和具體實現類解耦。2…

[轉]Struts 2.1發布

作者 Ian Roughley譯者 崔康 發布于 2009年2月4日 上午8時13分 Struts2框架剛剛發布最新2.1版。該版本做了重大升級&#xff0c;包括重構更多代碼到插件框架、通過增加convention插件減少XML配置和改進REST支持。 我采訪了Musachy Barroso——該版本的一位開發人員&#xff0c…