如何在實際工作中發現模式(一)

2021-09-05 14:15:56 字數 1705 閱讀 4887

1.前提

模式的發現是可遇不可求的,既然是發現,就有機會的成分存在。不可能當我們希望發現模式時就一定能夠發現,困此發現模式的第1個前提是不要為了發現而發現,這樣你會失望的。然而,機會從來是被有準備的人抓住的。重構原有的專案、學習同行的經驗和總結是發現模式的最好時機。需要強調的是,不僅僅只有設計模式,分析模式和過程模式等都是我們發現的目標;第2個前提是要把握住發現模式的時機。如果專案正處在緊要關頭,而你有了新發現,卻沒有時間,這時千萬記住要把想法記錄下來,這是最寶貴的素材。

2.確定範圍

當你感覺到某些問題似曾相識,在解決問題時似乎曾經重複用到某些思路時,可能就是你遇到了潛在的模式。首先要做的是將問題的範圍確定下來,如問題是否可以分解為子問題?其相關的因素是什麼?如果問題針對的是具體的平台或語言,你發現的可能是一種「方言」;如果問題比較複雜,你可能需要用模式語言來描述一組模式。

確定範圍的另乙個工作是需要將似曾相識的問題收集起來,因為模式是反覆出現的問題的抽象,因此一定要有反覆使用的例項作為模式形成的基礎。應該注意的是,收信的範圍不限於自己完成的專案,也可以是他人的成果,如開放源**專案和商業軟體等。只有確信發現的問題和對應的解決方案是反覆出現的,才可能進一部將其歸納為模式。經常是在收集的過程中,會發現一些表面類似的問題實際上並不相同,或者是所處的場景不同,或者是問題的本質不同。

3.明確問題及其所處的上下文

如果問題明確,就等於解決了一半,而明確問題往往是很困難的。很多情況下,我們在意識上已經知道了問題是什麼,但是卻難以言表。回想一下我們已經學習過的設計模式,是否能用一句話說出需要解決的問題?看一看gof給出的意圖,就會發現這是乙個相當困難的事情。

因此乙個好的方法是從具體到一般,即先將問題存在的某個具體環境描述清楚。豐書在描述模式時,很多章節的引言就是起這個作用。如果我們不能一次完成抽象,就讓我們從具體開始,這類似於gof的動機描述。當乙個具體場景用文字描述清楚後,即可著手發現這個場景中的一般規律,這就是問題所處的上下文。經常在我們分析上下文後,即可以將問題歸納出來。

乙個問題的例項是「如何管理web窗體的狀態?」

這個問題的上下文環境是「在web應用中,需要web窗體儲存狀態,以便於使用者與應用之間的互動。而web窗體存在於瀏覽器,由於http會話的無狀態特點,單純的瀏覽器-web伺服器無法儲存web窗體的狀態」。

4.確定forces

forces是模式的特點,也是最重要的部分之一,儘管gof的設計模式結構中沒有這個部分。要知道我們中的大部分人達不到gof的水平,因此還是要將forces明確地寫出。如果你希望在模式社會中進行交流,那麼這一點非常重要。

forces的作用在於展示解決方案的必要性,即說明在查詢問題的解決方案時需要考慮的各方面的因素。這些因素往往是互相制約的,解決問題可能需要付出某種代價。forces列出的可能是後選的方案和代價,也可能是相關的潛在問題。

如下是一些可能的forces。

(1)在網頁中增加隱含域,在隱含域中儲存相應的狀態。然而這樣一方面增加了網路的負荷(因為狀態值需要反覆傳遞),另一方面安全性不好,通過檢視頁面的html**可以獲得並修改頁面狀態。

(2)可以在資料庫中儲存網頁的狀態,然而這樣會增加系統的複雜程度和成本。

(3)可以採用.net提供的檢視功能儲存窗體中控制項的狀態,然而檢視會大量增加頁面**量,網路負荷會明顯增大並且沒有從根本上解決安全問題。

(4)可以在cookie中儲存狀態,然而有些瀏覽器不支援cookie且有潛在的安全問題。

如果你的模式是「在session中保持窗體狀態」,那麼上面的forces已經說明了你為什麼選擇對應的解決方案了。

如何在實際工作中發現模式(二)

描述解決方案 如果forces描述非常吸引人,那麼使用者會迫切希望知道解決方案。軟體開發人員通常希望採用圖示法描述解決方案,因為一張圖勝過千行字。然而需要注意的是,如果採用圖示,一定要確保使用者知道圖示的含義。如果採用uml等標準的圖示語言,一定要準確合理 如果是非標準的圖示,一定要註明圖例的含義。...

如何在實際工作做開展效能測試

回答 從小入手,從簡單的開始,然後慢慢的做更系統更複雜的效能測試。剛接觸效能測試的同學往往不知道效能測試是有需求的。比如 如果你是效能測試同學,假設時間有限,這兩個需求你只能接乙個,你是接哪個?很多同學會選第乙個,因為第乙個需求似乎是效能測試的需求,第二個跟效能測試似乎沒有特別強烈的關係。但是第乙個...

FTP的兩種模式和在實際工作中應用

ftp是一種檔案傳輸協議,它支援兩種模式,一種方式叫做standard 也就是 active,主動方式 一種是 passive 也就是pasv,被動方式 standard模式 ftp的客戶端傳送 port 命令到ftp server。passive模式ftp的客戶端傳送 pasv命令到 ftp se...