四色原型

????????做技術(shù)的有很多誤區(qū)混埠,比如經(jīng)常陷入純技術(shù)鉆牛角尖的爭辯揍堰,而全然不顧業(yè)務場景鹏浅,技術(shù)活做太多,經(jīng)驗一籮筐屏歹,但是有時會疑惑隐砸,這些經(jīng)驗是否適合其他自己沒有經(jīng)歷過的新系統(tǒng)呢?我們在技術(shù)設(shè)計路線上走得太久蝙眶,容易迷失方向季希,什么是設(shè)計不足;什么是過度設(shè)計幽纷,如何把握這個度式塌?

   在對待項目上,有一種極端是認為每個項目都是特殊的友浸,不可能和其他項目有共同之處峰尝;這算是一種經(jīng)驗主義吧。 甚至有些開發(fā)人員唯大項目不做收恢,認為只有大項目才能鍛煉自己武学,做過大項目的認才是牛人。

  這些誤區(qū)都是因為我們軟件基礎(chǔ)知識的缺失伦意,沒有人告訴我們火窒,大小不同項目是否有共同點? 我們現(xiàn)在做的項目需求是處于所有項目需求領(lǐng)域中何種位置驮肉?為滿足這個業(yè)務需求我高質(zhì)量高效率完成了這個軟件系統(tǒng)熏矿,那么在這個軟件系統(tǒng)中體現(xiàn)的解決方案是否適合其他項目中其他類似的需求呢?

  以前,通過設(shè)計模式我們已經(jīng)完成了設(shè)計上重用票编,再通過重用框架褪储,可以更高效粒度高大地更高質(zhì)量地實現(xiàn)大部分系統(tǒng), 但是栏妖,看上去同一個業(yè)務需求乱豆,在不同的項目,每次還是需要我們對這些框架進行重新組織設(shè)計吊趾,哪怕它們有些相同之處宛裕, 例如: 在電子購物系統(tǒng)中有商品和用戶兩種重要元素,商品本身是一個物论泛,而且可能有層次類別區(qū)分揩尸;商品和用戶必然發(fā)生關(guān)系;在論壇系統(tǒng)中也存在帖子和用戶兩個元素屁奏,帖子是一個物岩榆,本身也有 類別區(qū)分,每個帖子必然和一個用戶發(fā)生聯(lián)系坟瓢。這兩個系統(tǒng)使用J2EE實現(xiàn)勇边,當我們進行建模分析時,發(fā)現(xiàn)彼此之間隱約有一些共同之處折联。具體架構(gòu)時又會涉及到表現(xiàn)層粒褒、業(yè)務層和持久層設(shè)計,兩者幾乎都可以使用相同的架構(gòu)如(Struts+Jdon+Hibernate) 等等诚镰。

  那么奕坟,能不能省卻我們在每個項目上都會這些類似相同的需求重新再做一次設(shè)計架構(gòu)呢?如果設(shè)計模式重用是針對一個具體設(shè)計場景而實現(xiàn)的重用清笨,現(xiàn)在我們幾乎不再滿足這種細粒度的低效重用效率月杉,如果我們能抓助軟件源頭:業(yè)務需求,總結(jié)出某一類問題的共同之處抠艾,那么與之相聯(lián)系的整個解決方案 也許就能夠得到重用苛萎,這種重用粒度更大,從而更高帶來開發(fā)效率检号。

  但是首懈,有一個問題:不同項目的業(yè)務需求之間到底是否有共同之處?大項目和小項目的業(yè)務需求是否有共同之處谨敛? 我們每做一個項目,是否可以達到一葉知秋的效果呢滤否?

業(yè)務需求在我們軟件系統(tǒng)一般用Model來統(tǒng)指脸狸,筆者曾經(jīng)提出:域建模、模式和框架是Java軟件的三個大方面, 其中域建模起著關(guān)鍵龍頭作用炊甲,如何分析業(yè)務需求泥彤,如何實現(xiàn)正確的類圖(建模)表達,是決定整個系統(tǒng)成敗所在卿啡。更有這樣的觀點:No model,no patterns ,then no framework?Model代表業(yè)務場景吟吝,沒有業(yè)務需求,就沒有設(shè)計模式颈娜,也沒有框架剑逃。

  幾年前誕生的MDA是在這個方向進行了探索,很多先驅(qū)大師更在這方面進行了理論探索官辽,如果說OO是對現(xiàn)實世界的一種抽象蛹磺,那么MDA是比OO更加抽象的一種技術(shù)或方法論⊥停“我們在一個軟件革命的開始萤捆,它象90年代我們看到的面向?qū)ο缶幊虖膫鹘y(tǒng)過程語言中抽象出來一樣∷着”

原型archetypes

原型一詞來自于希臘語archetypo (arcetupo), 意味著 "original pattern." (原始模式)

  比如英雄這個原型在美國或在中國看上去可能不一樣俗或,但是英雄就是英雄,我們還是能夠很快地總結(jié)出英雄的一些特點岁忘。 因為原型是人類組織辛慰、總結(jié)和概括客觀世界的基本概念,我們完全有理由在軟件開發(fā)領(lǐng)域應用這些概念臭觉。

業(yè)務原型business archetypes

  OO軟件系統(tǒng)是對業(yè)務領(lǐng)域(business domain)的思考抽象并進行管理操作昆雀,注意業(yè)務領(lǐng)域這個概念,我們相信應該能在業(yè)務領(lǐng)域中發(fā)現(xiàn)原型蝠筑,或者在軟件系統(tǒng)狞膘;或者這些系統(tǒng)模型中。我們稱這種原型類型為業(yè)務原型(business archetype)

  一個業(yè)務原型應該是一個在業(yè)務領(lǐng)域或商業(yè)軟件系統(tǒng)持續(xù)發(fā)生并且普遍存在的最初級的事物什乙。

  Party是一個業(yè)務原型例子挽封,一個Party代表可標識的、可定位的單元或單位臣镣,這些單位有正常的 狀態(tài)辅愿。 通常一個Party用來表示某個人或某個組織。所有商業(yè)系統(tǒng)都或多或少有Party概念忆某。

  原型之間是相互交互的点待,Party, Product, 和 Order是每個虛擬商業(yè)系統(tǒng)的基本概念,在這個商業(yè)系統(tǒng)中弃舒,你可以賣產(chǎn)品或服務癞埠。我們將這些原型之間的協(xié)作看成是業(yè)務原型模式(business archetype patterns).

  業(yè)務原型模式business archetype pattern定義:它是在業(yè)務領(lǐng)域或商業(yè)軟件系統(tǒng)持續(xù)發(fā)生并且普遍存在業(yè)務原型之間的協(xié)作状原。

原型(Archetypes)和分析類(analysis classes)區(qū)別

分析類(analysis class)是代表問題域中一種即時抽象,它對應真實世界的業(yè)務概念苗踪。

設(shè)計類(Design class)是一種達到可以實現(xiàn)程度的類颠区。分析類是用于理解業(yè)務;而設(shè)計類用于理解技術(shù)解決方案通铲,例如設(shè)計模式毕莱。分析類是從問題域(業(yè)務需求)中提取的,并沒有具體實現(xiàn)特點颅夺; 而設(shè)計類包含來自問題域(業(yè)務需求)和解決域(e.g., J2EE, .NET, or Web services)的特性朋截, 從設(shè)計模式的使用特點可以了解這些,有人曾經(jīng)單純拿出一段if else語句碗啄,而不考慮問題域质和; 就試圖使用某個模式替代這段if else,這就是因為他沒有認識道設(shè)計類的這個特點稚字。

  原型總是比正常的分析類更加抽象饲宿,屬于位于目前抽象層次的更高端,因此胆描,通常原型模式可以生成一個或多個分析類瘫想。

  原型模式和分析模式的關(guān)系怎樣,原型模式是分析模式嗎昌讲?不是国夜,從定義范圍上看,原型模式有很多特性看上去要比分析模式多短绸。分析模式是首先由Matin Fowler提出并定義如下:"分析模式是一組概念车吹,這些概念代表業(yè)務建模中一個普遍的構(gòu)建,它也許和一個域相關(guān)醋闭;或跨越多個域窄驹。 其中并沒有任何原型的概念。

原型模式比分析模式要更加豐富证逻,體現(xiàn)以下幾點:

原型模式可以使用UML來表達(Together中可以實現(xiàn))乐埠; 原型模式可以作為一種平臺獨立Model(PIM)適合MDA開發(fā)流程; 而這些分析模式則都不可以囚企。

四色原型

  四色原型是誕生于90年代丈咐,現(xiàn)在被廣泛使用的一種系統(tǒng)分析方法,如Borland的Together架構(gòu)師版龙宏,準確地說棵逊,是由Peter Coad 和 Mark Mayfield首先提出[Coad92],然后由David North拓展[Coad95-97]

1.moment-interval

2.role

3.catalog-entry-like description

4.party, place or thing

前面已經(jīng)說過,域建模是整個軟件系統(tǒng)的龍頭银酗,在現(xiàn)代Java技術(shù)如JiveJdon3.0開始之前辆影,我們都是需要領(lǐng)域建模掩浙,也就是在UML中畫出類圖,然后標記上類圖四種關(guān)系(關(guān)聯(lián)秸歧、依賴、繼承和實現(xiàn))衅澈,但是這些只是UML圖的表面键菱,只是一種畫圖技巧,就象CAD畫圖一樣今布,你可能沒有被告知:這個類圖是怎么出來的经备?為什么選用關(guān)聯(lián)而不是依賴,這些實際都屬于分析領(lǐng)域的知識部默,而四色圖可以說為我們這種分析提煉提供了一種模板或分析框架侵蒙,這樣我們可以按圖索驥去分析每個陌生的系統(tǒng),我們擁有強大的分析方法工具傅蹂。

moment-interval archetype

這是一個很重要的原型纷闺,重要在于時間概念上:某個時刻(moment)或一段很短時間(interval)內(nèi). 意味在某個時刻發(fā)生的事情因為業(yè)務要求或合法性原因需要跟蹤;或者過一段時間以后份蝴,應該是很短的時間犁功,可以幫助我們尋找到它。

  賣東西是在某個時刻發(fā)生的婚夫,它有發(fā)生日期和時間浸卦。租賃行為是在一段時間內(nèi)發(fā)生,從開始出租和歸還所租物品案糙;預定也是持續(xù)一段時間限嫌,什么時候預定;什么時候過期等时捌。

這些我們都使用moment-interval原型來表達怒医,UML圖如下:


  Moment-intervals是和組件模型捆綁在一起,代表了組件模塊關(guān)注的核心和靈魂匣椰,在一個Model中裆熙,Moment-intervals經(jīng)常封裝的是最關(guān)鍵的方法,為讓其顯目禽笑,moment-interval的UML圖我們使用粉紅顏色表示入录。在代碼上用@標識符標識:

/** @archetype moment-interval*/

public class Sale {

  public BigDecimal calcTotal(){

  }

  private int number;

  private Date date;

}

  在任何領(lǐng)域中,我們都能尋找moment-intervals原型并且開始建模佳镜,在原材料資源管理系統(tǒng)中僚稿,我們可以這樣對待從報價單(RFQ)到購買訂單(PO)直至發(fā)票,在一個制造管理系統(tǒng)中蟀伸,我們也就可以將一個計劃的過程和步驟分析到實際過程和詳細步驟蚀同。

  原型在幫助指導建模方面一個有效方式是:它能標識那些被包含在Model模型中的類(Classes)以便于區(qū)分缅刽,原型不只是簡化了類的區(qū)別;原型還可以區(qū)分類的行為職責(responsibilities)蠢络,例如類的屬性衰猛,方法等。

role archetype

  角色原型比較容易理解刹孔,任何一個系統(tǒng)都需要人或某個組織介入運行啡省,例如論壇系統(tǒng)需要注冊者角色發(fā)言;銷售訂單需要業(yè)務員角色制定髓霞,等等卦睹。

  這里有一個Party原型定義:它表示一個可標識、可定位的單元方库,這個單元有自己正常的狀態(tài)并且能夠自主控制自己的一些行為结序,通常情況下,人或組織是一種Party纵潦,但象護照徐鹤,身份證等注冊性標志等都可以作為Party。

  注意酪穿,并不是說Party或人或組織就是Role原型凳干,必須Party或人或組織參與一種活動后才為角色晨横,就象張三在電影中表演皇帝咆贬,他只有參與電影表演才是皇帝角色;李四在XX公司的角色才是經(jīng)理切油,他只有參與這家公司運作才是角色經(jīng)理只磷;否則他們只是一個Party原型经磅。

  所以,Role角色是Party扮演的(a role that a Party plays)钮追,Party是角色Role的扮演者(role-player)预厌。

  當我們在建模時,對于一個角色扮演者元媚,可以有他自己的核心屬性如名稱轧叽、年齡(以人為例子),也可以有與業(yè)務相關(guān)的方法刊棕,比如一個小店炭晒,當?shù)昀习迦ナ斟X時,他的角色就是收銀員(cashier)甥角,此時可以將與收銀員角色相關(guān)業(yè)務特點加于其上网严;當然,同時他也可以是老板(Owner)角色嗤无。那么下圖中authorizedFor方法就是參與每個角色的行為震束,當他作為某個角色被授權(quán)登錄后怜庸,與此角色相關(guān)的業(yè)務特點就應用在他身上。


  大家已經(jīng)注意到了:角色原型在UML中是使用黃顏色標識的垢村。角色模型是第二重要的原型割疾,所以使用黃色。

  我們已經(jīng)知道嘉栓,Party是一個又自主行為杈曲、能夠控制自己行為的表示,如人或組織胸懈,還有其他沒有自主行為的表示,也就是某個地方或位置或某個事情恰响,我們一般稱( place, or thing)趣钱,不但Party可以成為角色,而且 place或thing也可以成為角色胚宦,比如首有,一個商品Product可能又兩種角色:在銷售過程中商品;正在使用的商品枢劝。

party, place, or thing archetype

  上面我們說過井联,party place或thing都可以成為角色原型,注意到角色原型中的UML圖您旁,party圖是以綠色表達烙常。

  Party表示有自己正常的狀態(tài)并且能夠自主控制自己的一些行為,通常情況下鹤盒,人或組織是一種Party蚕脏,但象護照,身份證等注冊性標志等都可以作為Party侦锯。

  Place or thing表示一樣不會說話沒有行為的東西驼鞭,例如商品,當然這個商品可以扮演不同角色尺碰,既可以是零售的一個電源插座挣棕;也可以批發(fā)系統(tǒng)中的一個電源插座,它是被賣的亲桥,可能在不同業(yè)務系統(tǒng)被賣的方式不一樣洛心。

description archetype

  種類description原型其實是第三重要的原型,一般情況下两曼,它類似目錄級別catalog-entry-like的種類皂甘,例如某個商品電源插座屬于家用電器這個種類,當然家用電器又屬于電器這個目錄悼凑,是一個樹形的目錄結(jié)構(gòu)偿枕。例如論壇中帖子和回帖之間也是一種種類原型璧瞬。

  比如你的紅色福克斯是福特生產(chǎn)的一輛轎車渐夸,它有車牌號嗤锉、購買日期、顏色和里程表等墓塌,這些代表Thing原型瘟忱,那么作為轎車這個種類來說,它有一些種類屬性苫幢,例如:生產(chǎn)廠家访诱、生產(chǎn)批號、適用顏色等韩肝,這些屬性是轎車這類所有車輛都共有的触菜。

  在設(shè)計模式這個實現(xiàn)級別,我們通常使用組合模式來實現(xiàn)種類原型哀峻。

  

  Description原型在UML中使用藍色表達涡相。

四色原型圖

  每個原型圖有屬性和連接(關(guān)聯(lián) 依賴等關(guān)系)兩個部分組成。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末剩蟀,一起剝皮案震驚了整個濱河市催蝗,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌育特,老刑警劉巖丙号,帶你破解...
    沈念sama閱讀 222,865評論 6 518
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異缰冤,居然都是意外死亡槽袄,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,296評論 3 399
  • 文/潘曉璐 我一進店門锋谐,熙熙樓的掌柜王于貴愁眉苦臉地迎上來遍尺,“玉大人,你說我怎么就攤上這事涮拗∏罚” “怎么了?”我有些...
    開封第一講書人閱讀 169,631評論 0 364
  • 文/不壞的土叔 我叫張陵三热,是天一觀的道長鼓择。 經(jīng)常有香客問我,道長就漾,這世上最難降的妖魔是什么呐能? 我笑而不...
    開封第一講書人閱讀 60,199評論 1 300
  • 正文 為了忘掉前任,我火速辦了婚禮,結(jié)果婚禮上摆出,老公的妹妹穿的比我還像新娘朗徊。我一直安慰自己,他們只是感情好偎漫,可當我...
    茶點故事閱讀 69,196評論 6 398
  • 文/花漫 我一把揭開白布爷恳。 她就那樣靜靜地躺著,像睡著了一般象踊。 火紅的嫁衣襯著肌膚如雪温亲。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,793評論 1 314
  • 那天杯矩,我揣著相機與錄音栈虚,去河邊找鬼。 笑死史隆,一個胖子當著我的面吹牛节芥,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播逆害,決...
    沈念sama閱讀 41,221評論 3 423
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼蚣驼!你這毒婦竟也來了魄幕?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 40,174評論 0 277
  • 序言:老撾萬榮一對情侶失蹤颖杏,失蹤者是張志新(化名)和其女友劉穎纯陨,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體留储,經(jīng)...
    沈念sama閱讀 46,699評論 1 320
  • 正文 獨居荒郊野嶺守林人離奇死亡翼抠,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,770評論 3 343
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了获讳。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片阴颖。...
    茶點故事閱讀 40,918評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖丐膝,靈堂內(nèi)的尸體忽然破棺而出量愧,到底是詐尸還是另有隱情,我是刑警寧澤帅矗,帶...
    沈念sama閱讀 36,573評論 5 351
  • 正文 年R本政府宣布偎肃,位于F島的核電站,受9級特大地震影響浑此,放射性物質(zhì)發(fā)生泄漏累颂。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 42,255評論 3 336
  • 文/蒙蒙 一凛俱、第九天 我趴在偏房一處隱蔽的房頂上張望紊馏。 院中可真熱鬧料饥,春花似錦、人聲如沸瘦棋。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,749評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽赌朋。三九已至凰狞,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間沛慢,已是汗流浹背赡若。 一陣腳步聲響...
    開封第一講書人閱讀 33,862評論 1 274
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留团甲,地道東北人逾冬。 一個月前我還...
    沈念sama閱讀 49,364評論 3 379
  • 正文 我出身青樓,卻偏偏與公主長得像躺苦,于是被迫代替她去往敵國和親身腻。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 45,926評論 2 361

推薦閱讀更多精彩內(nèi)容