[]?
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
軟件架構(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
軟件架構(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