人要有夢想

          為夢想努力

          常用鏈接

          統(tǒng)計

          j2ee

          最新評論

          2006年5月30日 #

          架構(gòu)之web framework- struts

          []?

          Martin.guo

          ?

          J2ee 架構(gòu)中一般都要考慮 Web Framework 的選擇。很多人選擇比較流行的 Struts 。項目組中遇到過這樣的情況,有些人不熟悉 Struts ,而有些人又對 Struts 青睞有加。有沒有一個折中的辦法來滿足所有的人呢?

          ?

          我是這樣設(shè)計的:

          通過攔截提交到 ActionServlet 上的 http 請求,經(jīng)過 Http Parse 來收集請求參數(shù),以 Name-Value 的形式存放為請求值對象,并且放在請求線程相關(guān)的上下文中。這個時候你就可以在 Action 執(zhí)行結(jié)束前的任何地方拿到這些請求數(shù)據(jù)了。

          ?

          在這個基礎(chǔ)上,我們保留了 Struts Action ,并且規(guī)定 Action execute 方法里不能出現(xiàn)任何跟業(yè)務(wù)相關(guān)的代碼 , 僅僅是負(fù)責(zé)頁面的流轉(zhuǎn)。

          ?

          那么業(yè)務(wù)怎么辦呢?我們定義了一個接口 Command, 它也只有一個方法 , 我們也取名字為 execute, 并且沒有任何參數(shù)和返回數(shù)值。該方法的職責(zé)就是執(zhí)行業(yè)務(wù)邏輯。這個時候你就要問了。 Action 里抽離業(yè)務(wù)邏輯,怎么調(diào)用 Command 呢?請求提交的數(shù)據(jù)怎么給 Command ?Command 執(zhí)行完后的業(yè)務(wù)數(shù)據(jù)怎么返回?

          ?

          我們設(shè)計了一個業(yè)務(wù)執(zhí)行器,它的功能就是執(zhí)行 Command 的業(yè)務(wù)邏輯實現(xiàn) . 而把執(zhí)行器的執(zhí)行寫到了 Action 里面。這樣就隔離了頁面流轉(zhuǎn)和業(yè)務(wù)執(zhí)行。 Action 的代碼顯的很簡練和模板化。

          ?

          由于請求數(shù)據(jù)是放在請求線程相關(guān)的上下文中,所以可以很方便的拿到。同時 Command 執(zhí)行完畢的返回數(shù)據(jù)也是通過這個上下文返回給 Action 或者其他跟此請求線程相關(guān)的組件,說白一點就是此線程能夠跑到的任何代碼處都可以去跟上下文交互,存取線程相關(guān)的數(shù)據(jù)和服務(wù)。

          ?

          設(shè)計到此為止,已經(jīng)可以回答開頭的問題了。

          ?

          對于熟悉 Struts 的人呢,可以積極放心的使用 Struts 標(biāo)簽,使用 Formbean, 但有一點就是自己要把 FormBean 放到線程相關(guān)的上下文中,這樣你就可以在 Command 里面去拿出來工作了,同時 Command 執(zhí)行完畢后,你就可以順手把返回數(shù)據(jù)填充到這個 FormBean 里面去了。跟你平時使用沒有太大區(qū)別。

          ?

          而對于不熟悉的人呢,你可能不喜歡寫 Struts 標(biāo)簽,也可能不喜歡死板的 Formbean, 那么 OK ,你完全不用關(guān)心這些,你只要直接在 Command 里面去寫邏輯代碼就可以了。但有一點就是要,你要手工把返回的數(shù)據(jù)集合放到 request 里面去,然后到流轉(zhuǎn)的 JSP 里面取出來展示。

          ?

          OK ,皆大歡喜。

          ?

          ?

          msn:gdq123@hotmail.com

          posted @ 2006-06-07 19:29 人要有夢想 閱讀(1179) | 評論 (3)編輯 收藏

          軟件架構(gòu)師之架構(gòu)過程概要

          軟件架構(gòu)是軟件系統(tǒng)一個高層次的結(jié)構(gòu)體現(xiàn),顯示了系統(tǒng)分解后組件的布局和組件之間的關(guān)系。好的架構(gòu)描述應(yīng)該包含架構(gòu)的多個視角,組件的設(shè)計和擴(kuò)展描述,以及為滿足功能性需求和非功能性需求的設(shè)計原則。
          一般說,軟件架構(gòu)分為5個步驟,
          1.建立架構(gòu)的任務(wù)并且形成架構(gòu)團(tuán)隊。
          2.建立并且文檔化架構(gòu)需求。
          3.設(shè)計架構(gòu)
          4.驗證架構(gòu)是否達(dá)到需求
          5.發(fā)布架構(gòu)到開發(fā)團(tuán)隊

          然后我們細(xì)說這五步驟
          第一,架構(gòu)是需要有目標(biāo)的,一般是為了滿足長期的業(yè)務(wù)需求。然后去制定任務(wù)并且明確里程碑。讓架構(gòu)組的每個人都明確架構(gòu)的目標(biāo)以及任務(wù)的進(jìn)行和任務(wù)之間的關(guān)系。總體架構(gòu)設(shè)想這個時候需要出來了。關(guān)鍵組件設(shè)想也應(yīng)該有了。
          第二,這個時候就需要按照目標(biāo)去分開整理架構(gòu)的需求了。開始可能是很多的需求索引,每個索引就是一兩句話的表達(dá)。對于索引要給出簡單的描述。索引評審之后需要細(xì)化需求,是一個更為詳細(xì)的需求整理,除了文字描述,還可以配置圖形等。然后要做的就是建立use case去覆蓋這些需求。
          第三,設(shè)計架構(gòu)可以分為概要設(shè)計和詳細(xì)設(shè)計階段。概要設(shè)計需要給出一個比較輪廓性的設(shè)計說明,能夠比較簡要的通過這些設(shè)計元素去闡述use case,在總體上把故事講完整。然后評審,進(jìn)入詳細(xì)設(shè)計階段,細(xì)化的設(shè)計更為完整和貼近實現(xiàn)。同樣需要一個說故事的過程,把use case通過詳細(xì)設(shè)計的元素說的更為生動和形象。然后去實現(xiàn)和整合。
          第四,驗證的過程是測試的一個過程,在需求階段會確立很多測試計劃和用例。對需求進(jìn)行一個掃蕩,看實現(xiàn)是否到達(dá)了承諾。
          第五,不斷測試并且反饋修改之后,穩(wěn)定版本就可以發(fā)布到開發(fā)團(tuán)隊了。


          個人觀點,請大家多討論。


          架構(gòu)的設(shè)計部分
          1。更應(yīng)該側(cè)重組建的分解以及組件之間的接口關(guān)系。比一般的軟件設(shè)計過程,更突出組件的接口特性和使用描述。組件的功能列表,生命周期,并發(fā)情況說明,通訊消息格式等。
          2。架構(gòu)中的組件是有統(tǒng)一的架構(gòu)思想和原則。組件是要被約束的。
          3。組件需要提供事例代碼,典型應(yīng)用場景,異常以及測試說明。
          4。組件有時候是要映射到物理視圖中的進(jìn)程。
          5。側(cè)重架構(gòu)系統(tǒng)的動態(tài)特性,組件之間的協(xié)作關(guān)系。



          msn:gdq123@hotmail.com

          posted @ 2006-06-01 11:34 人要有夢想 閱讀(2705) | 評論 (5)編輯 收藏

          軟件架構(gòu)師

          軟件架構(gòu)師是什么?需要什么樣的知識體系?如何成為優(yōu)秀的軟件架構(gòu)師呢?

          第一個問題:
          軟件架構(gòu)師一詞應(yīng)該是對應(yīng)系統(tǒng)架構(gòu)師,都是架構(gòu)師,但側(cè)重不同。在4+1視圖中,我覺得如果把架構(gòu)師分為這兩種的話,軟件架構(gòu)師應(yīng)該是站在邏輯視圖和開發(fā)視圖的角度,而系統(tǒng)架構(gòu)師則更多的是過程視圖和物理視圖。當(dāng)然,這兩個角色就象是人的兩個眼睛,缺少一個都會定位不準(zhǔn)確,容易是系統(tǒng)目標(biāo)偏離。

          當(dāng)然了,現(xiàn)實世界中,一般這兩中角色集中在一個人身上體現(xiàn)出來,或者一個小組。很多公司都不設(shè)置此類職位;有的公司則分工很細(xì)。

          第二個問題:
          知識體系不好說,只說重點的吧。
          軟件架構(gòu)師的職責(zé)是把需求轉(zhuǎn)換為軟件世界的模型。4+1視圖中以use case作為核心,其中功能性需求以及部分非功能性需求會被軟件架構(gòu)師通過分析和設(shè)計,映射為各種軟件設(shè)計模型。從OOA/OOD角度說,use case 在這個過程中是要轉(zhuǎn)換為各種UML,其中類圖,序列圖,狀態(tài)圖是最常用到的。這個轉(zhuǎn)換過程是需要智慧的,use case是目的,各種OO的原則是指導(dǎo),設(shè)計模式是經(jīng)驗,靈活運用是能力。里面蘊涵了設(shè)計的美感,我覺得這個過程是衡量一個軟件架構(gòu)師的最重要的指標(biāo)。

          當(dāng)然這個過程是迭代和反饋的,我覺得概要設(shè)計和詳細(xì)設(shè)計只是思考同一個問題的粒度不同而已。

          另外就是我們要熟悉語言,詳細(xì)設(shè)計是要轉(zhuǎn)換為代碼的,而且跟語言是有關(guān)系的。語言比如java/c++等,詳細(xì)設(shè)計的模型是有很多不同的。就需要軟件架構(gòu)師有過這個過程,并且是非常良好的映射。

          除了語言就是要熟悉某個技術(shù)領(lǐng)域,比如J2EE/DOTnet.從J2ee來說,可能需要了解比如jsp/servlet/ejb/jndi/jta/jdbc等。還需要了解各種web framework,o/rmapping,ioc/aop容器等等。還有的就是一些技術(shù)組件和業(yè)務(wù)組件,不如workflow,rules engine等等。另外比如各種database.熟悉這些東西的目的,是把這些軟件和組件合理并且有機(jī)的組織起來成為一個開發(fā)的架構(gòu)。這個過程是需要創(chuàng)造力和想象力的。可能很多人認(rèn)為這個地方正是軟件架構(gòu)師體現(xiàn)能力的地方。

          第三個問題:
          我不是很清楚,但我認(rèn)為意志和想象力能夠使每個有目標(biāo)的人達(dá)到彼岸。




          msn:gdq123@hotmail.com

          posted @ 2006-05-30 13:31 人要有夢想 閱讀(5644) | 評論 (1)編輯 收藏

          主站蜘蛛池模板: 嘉峪关市| 城步| 盘山县| 丹凤县| 永城市| 长乐市| 镇宁| 黑山县| 百色市| 蒙自县| 酒泉市| 太仆寺旗| 筠连县| 鹤庆县| 集贤县| 霍林郭勒市| 邓州市| 濉溪县| 包头市| 武定县| 临颍县| 安吉县| 固原市| 长葛市| 浦东新区| 武定县| 永定县| 博乐市| 桃江县| 临漳县| 济阳县| 平安县| 屯留县| 南澳县| 旬阳县| 富川| 杨浦区| 当涂县| 普陀区| 伊金霍洛旗| 大余县|