MVC團(tuán)隊(duì)組合模式,主要源于J2EE中常說(shuō)的MVC演變而來(lái)。確切地說(shuō)這個(gè)東西是我自己杜撰出來(lái)的,但又經(jīng)歷過(guò)一些項(xiàng)目實(shí)踐,今天拿出來(lái)在與大伙這里說(shuō)說(shuō),一來(lái)彌補(bǔ)一下自己長(zhǎng)期不寫(xiě)技術(shù)類(lèi)文章的缺陷,不然很多人又說(shuō)我作為一個(gè)軟件人,在博客中連起碼的技術(shù)東西都沒(méi)有,很是慚愧。二來(lái)也想把自己經(jīng)歷過(guò)的丁點(diǎn)經(jīng)驗(yàn)告訴大伙,至于是對(duì)是錯(cuò),有用與否,那只有天曉得了,哈哈。。。。
說(shuō)到MVC團(tuán)隊(duì)組合模式,那就要說(shuō)說(shuō)我的框架WMframework,
WMframework現(xiàn)階段采用主要技術(shù)有:s2,ibtatis2,spring3,HTML,js, xml,ajax,整個(gè)技術(shù)框架也是自己杜撰出來(lái)的,一直自己在默默地喜歡著,改進(jìn)著,這些年的程序員生涯也就剩余這點(diǎn)東西可以懷念下了。我向來(lái)不是吝嗇的人,所以在后面的時(shí)間里我會(huì)逐步把自己的WMframework拿出來(lái)與大伙分享,希望有心的你可以期待,當(dāng)然更夢(mèng)想得到大伙的真知灼見(jiàn)。今天我主要說(shuō)的東西還是我的團(tuán)隊(duì)中如何使用MVC團(tuán)隊(duì)組合模式進(jìn)行軟件開(kāi)發(fā)。
MVC團(tuán)隊(duì)組合模式?
何謂“MVC團(tuán)隊(duì)組合模式”,主要意思就是把一個(gè)團(tuán)隊(duì)里面的各成員按其個(gè)人綜合技能進(jìn)行分工協(xié)作,具體地說(shuō)就是針對(duì)每個(gè)業(yè)務(wù)模塊的開(kāi)發(fā),采用各成員進(jìn)行分工協(xié)作完成的模式。一個(gè)模塊,張三完成一部分,李四完成另一部分,王五又完成其他部分。這有別于大伙常見(jiàn)的由一個(gè)人承擔(dān)某個(gè)模塊的開(kāi)發(fā)合作模式。
先來(lái)說(shuō)說(shuō)我們常見(jiàn)的開(kāi)發(fā)模式。大伙都知道,我們通常的軟件系統(tǒng)開(kāi)發(fā)中,很多時(shí)候都是這樣的,先由項(xiàng)目經(jīng)理或小組長(zhǎng)做統(tǒng)一的任務(wù)分配,把具體的各功能點(diǎn)模塊按人頭分配給團(tuán)隊(duì)中的各程序員們。比如用戶注冊(cè)張三負(fù)責(zé);組織機(jī)構(gòu)管理李四負(fù)責(zé);哪天哪天這個(gè)模塊由誰(shuí)完成,哪天哪天這部分由誰(shuí)實(shí)現(xiàn)。整個(gè)編碼計(jì)劃就是這樣指定下來(lái),直到系統(tǒng)的所有功能模塊都被分?jǐn)偟较鄳?yīng)的開(kāi)發(fā)人員身上。等待我們的程序員把各模塊都編碼完成,大伙再把這些代碼、功能進(jìn)行系統(tǒng)的整合、集成、測(cè)試等,這就是大家常見(jiàn)的甘特圖模式,也是我們通常碰見(jiàn)的開(kāi)發(fā)模式。
我提出的MVC團(tuán)隊(duì)組合模式,區(qū)別于上面最大的不同就是,我把任何一個(gè)業(yè)務(wù)模塊開(kāi)發(fā)任務(wù)分為3部分,由三類(lèi)不同角色的人員來(lái)共同完成,這三類(lèi)人員我稱它們?yōu)镸VC,即M_actor 模型執(zhí)行者、V_actor 視圖執(zhí)行者、C_actor 控制器執(zhí)行者。
下面我給出這三者的主要描述:
M: M_actor 模型執(zhí)行者
主要任務(wù):后臺(tái)業(yè)務(wù)處理模型,主要就是Dao,sqlmap的編寫(xiě);(在WMframework中,我已經(jīng)弱化了dao這層,因?yàn)樵赪Mframework中我們的dao都是公共的,開(kāi)發(fā)人員基本上不用寫(xiě)dao。)
個(gè)人要求:要求開(kāi)發(fā)人員對(duì)數(shù)據(jù)庫(kù)操作能力強(qiáng),對(duì)整體業(yè)務(wù)流程充分了解,保證其sqlmap編寫(xiě)的sql完成當(dāng)前模塊的業(yè)務(wù)需求。
這部分可以由擅長(zhǎng)數(shù)據(jù)庫(kù)開(kāi)發(fā)人員和需求分析人員結(jié)合完成。
V:V_actor 視圖執(zhí)行者
主要任務(wù):前臺(tái)表單視圖,主要就是jsp,html,js的編寫(xiě);完成頁(yè)面數(shù)據(jù)表單的設(shè)計(jì)、實(shí)現(xiàn)、業(yè)務(wù)數(shù)據(jù)的js校驗(yàn)、提交等。(在WMframework中,我對(duì)于頁(yè)面表單數(shù)據(jù)提交、校驗(yàn)也是一個(gè)公用的自定義js前臺(tái)框架,開(kāi)發(fā)人員只需要寫(xiě)簡(jiǎn)短的幾句js腳本調(diào)用即可。)
個(gè)人要求:開(kāi)發(fā)人員需要有很好的UI設(shè)計(jì)能力,可以更為人性化地實(shí)現(xiàn)頁(yè)面操作,使其有更好的用戶體驗(yàn),知道些js語(yǔ)法和html標(biāo)簽使用即可。
這部分由美工、UI技術(shù)人員和需求分析人員結(jié)合完成。
C:C_actor 控制器執(zhí)行者
主要任務(wù):s1/s2中的action,業(yè)務(wù)層接口service的編寫(xiě);
個(gè)人要求:開(kāi)發(fā)人員熟悉常用的java開(kāi)發(fā)模式,有很好的java開(kāi)發(fā)能力,能很好地處理request請(qǐng)求,respronse返回響應(yīng)等。(在WMframework中,我同樣弱化了action的使用,很多時(shí)候?qū)τ诙鄶?shù)頁(yè)面請(qǐng)求只需要調(diào)用公用的action即可,開(kāi)發(fā)人員基本上不用自己寫(xiě))。
這部分資深java開(kāi)發(fā)人員完成。
MVC團(tuán)隊(duì)組合模式優(yōu)勢(shì)
通過(guò)我的介紹看出些好處沒(méi)有?很明顯,若采用MVC的開(kāi)發(fā)模式來(lái)在組織團(tuán)隊(duì)人員,對(duì)不同類(lèi)型的人員要求就不盡相同。
C_actor 可以完成不用了解系統(tǒng)業(yè)務(wù),他們只需要關(guān)心如何解析前臺(tái)提交的請(qǐng)求數(shù)據(jù),就WMframework而言就是完成從request里面讀取xml轉(zhuǎn)化為bean(這里說(shuō)的bean也就是我們常說(shuō)的pojo、vo、bo等)的實(shí)現(xiàn);然后通過(guò)外部接口service轉(zhuǎn)交給內(nèi)部實(shí)現(xiàn)dao,最后在dao中完成持久層的相關(guān)操作;
V_actor 可以完全不用了解什么叫j2EE,只需知道jsp的表頭怎么寫(xiě)(其實(shí)很多時(shí)候不用寫(xiě),因?yàn)槲覀兌际莍nclude進(jìn)來(lái)的嘛),合理地設(shè)計(jì)頁(yè)面表單的布局,知道哪里該放button,哪里該用text,哪里擺個(gè)textarea,哪里該弄個(gè)select等,僅此而已;
M_actor不需要關(guān)心用戶界面如何設(shè)計(jì),該怎么制作,用戶數(shù)據(jù)以什么方式提交。他只需要清楚當(dāng)前業(yè)務(wù)涉及那些數(shù)據(jù)模型,各數(shù)據(jù)表中相應(yīng)的字段是否填上,哪些是必填項(xiàng),數(shù)據(jù)類(lèi)型是什么,數(shù)據(jù)大小如何定義,數(shù)據(jù)存儲(chǔ)是否正確等。
如果聯(lián)系到公司人員配置問(wèn)題,這里也有一點(diǎn)優(yōu)勢(shì)在里面。因?yàn)楹芏鄷r(shí)候,很多公司,總會(huì)在項(xiàng)目來(lái)臨一味擴(kuò)招,項(xiàng)目結(jié)束一味削減,而最終能保留下來(lái)的也就是那么幾個(gè)核心人物,當(dāng)然我這里不是提倡這樣的作法,畢竟多少有些兇殘。如果你的公司,你的項(xiàng)目采用了我說(shuō)的MVC團(tuán)隊(duì)組合模式開(kāi)發(fā),那很多時(shí)候,你的核心開(kāi)發(fā)人員、業(yè)務(wù)人員依舊全力地支撐著整個(gè)項(xiàng)目,他們掌握著整個(gè)項(xiàng)目的核心,所以很多時(shí)候,你可以重點(diǎn)培養(yǎng)M_actor與C_actor,對(duì)于V_actor自然多少有些微不足道,棄之無(wú)妨。不過(guò)做人起碼需要些厚道,盡管商場(chǎng)殘酷,商人無(wú)情,終究我們都是人,應(yīng)該多一點(diǎn)感情,多一點(diǎn)良知。實(shí)在不想要他們了,能最大限度給點(diǎn)補(bǔ)償也不枉人家為你賣(mài)命一場(chǎng)。
以上這些就是我能看到的基于MVC團(tuán)隊(duì)組合模式開(kāi)發(fā)的優(yōu)勢(shì),使用它可以讓我們的開(kāi)發(fā)人員減少許多需要關(guān)注和學(xué)習(xí)的東西,有時(shí)候悶頭想來(lái)做一個(gè)合格的java web開(kāi)發(fā)者,你最基本的可能需要知道這些:java、jsp、js、xml、css、sql、ide、html等,太雜,太多,太煩。但如果你使用如上所說(shuō)的開(kāi)發(fā)模式,讓開(kāi)發(fā)者專(zhuān)注于各自所特長(zhǎng)的一方面,并進(jìn)行很好地發(fā)揮,最后更好地完成自己的任務(wù),做好自己喜歡的工作,那種感覺(jué)應(yīng)該會(huì)好很多。起碼是辛苦并快樂(lè)著,哈哈。。
MVC團(tuán)隊(duì)組合模式劣勢(shì)
前面竟說(shuō)了些好聽(tīng)的,下面我來(lái)說(shuō)說(shuō)MVC團(tuán)隊(duì)組合模式的弊端,最明顯的一點(diǎn)就是,各類(lèi)型成員間開(kāi)發(fā)任務(wù)的同步性、順序性、可用性測(cè)試、問(wèn)題跟蹤等。比如一個(gè)用戶基本信息維護(hù)模塊,如果某天客戶需要增加一個(gè)用戶生日的信息,必然會(huì)涉及 C_actor進(jìn)行業(yè)務(wù)數(shù)據(jù)對(duì)象修改,M_actor修改sqlmap中的insert,select,update等語(yǔ)句,V_actor 修改表單jsp增加生日的輸入框等。又或者用戶基本信息業(yè)務(wù)模塊出現(xiàn)異常(數(shù)據(jù)不正確,不能保存等)也必然需要C_actor、M_actor、V_actor來(lái)配合完成跟蹤,這自然也就增加了當(dāng)前任務(wù)消耗的資源。再或者用戶基本信息業(yè)務(wù)模塊不能在規(guī)定的項(xiàng)目計(jì)劃時(shí)間完成,其最終的責(zé)任應(yīng)該算在誰(shuí)的頭上。C_actor說(shuō)用戶表單沒(méi)有設(shè)計(jì),如何完成action的編寫(xiě),V_actor抱怨數(shù)據(jù)模型沒(méi)有給出如何知道頁(yè)面元素類(lèi)型,哪些應(yīng)該必填,哪些應(yīng)該選填,哪些應(yīng)該下拉,哪些應(yīng)該只讀,我都不知道,叫我如何設(shè)計(jì)頁(yè)面;M_actor呢,咆哮V_actor頁(yè)面表單都沒(méi)有,叫我如何知道業(yè)務(wù)模型需要那些字段,需要什么樣的數(shù)據(jù)類(lèi)型,需要多大長(zhǎng)度。最終是個(gè)個(gè)推諉,人人有理,整天就是這樣纏繞在彼此間借口的閉環(huán)中,周而復(fù)始、無(wú)窮無(wú)盡。哎,程序員,難啊。。。。。
凡事皆有兩面性,對(duì)于MVC團(tuán)隊(duì)組合模式我基本上說(shuō)的差不多了。我曾經(jīng)在一些項(xiàng)目中使用過(guò)它,有說(shuō)好的當(dāng)然也有暴跳罵娘的,終究是孰是孰非,誰(shuí)對(duì)誰(shuí)錯(cuò),我也不得知曉,只待各位自己去想,去悟。
(注:本人文章均為原創(chuàng),轉(zhuǎn)載請(qǐng)注明出處!20100719寫(xiě)于深圳。)
一篇好的文章應(yīng)該如一壇佳釀,未償已久醉于心;或如一壺好茶,品嘗之間回味無(wú)窮;或如與心愛(ài)的人共進(jìn)晚餐,僅餐秀色足以飽食。我不妄想自己的文章能驚世駭俗,但始終期待有“和旋之音,擊缶之伴”。