国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 學(xué)院 > 開發(fā)設(shè)計(jì) > 正文

漫談EJB對(duì)面向?qū)ο笤O(shè)計(jì)的影響

2019-11-18 12:35:04
字體:
供稿:網(wǎng)友

  最近參與了一個(gè)嚴(yán)重依靠EJB技術(shù),針對(duì)某特定領(lǐng)域的軟件產(chǎn)品。由于該領(lǐng)域的業(yè)務(wù)邏輯種類復(fù)雜繁多,UI層無法做到非常簡(jiǎn)單,同時(shí)數(shù)據(jù)的采集、提交和表現(xiàn)也非常復(fù)雜,因此該產(chǎn)品使用了CS架構(gòu),通過一個(gè)胖客戶端連接EJB中的業(yè)務(wù)邏輯接口,然后由EJB負(fù)責(zé)調(diào)用下層的DAO等完成處理過程。
  
  由于EJB本身就是重量級(jí)的侵入型框架,在一定程度上阻礙了面向?qū)ο笤O(shè)計(jì),同時(shí)開發(fā)人員對(duì)EJB接口功能劃分的問題也并沒有足夠重視,只是本著“先運(yùn)行再重構(gòu)”的簡(jiǎn)單想法進(jìn)行了接口功能粒度的劃分。
  
  在開發(fā)初期中,因?yàn)樯婕暗降臉I(yè)務(wù)量較小,因此基本上若客戶端需要某個(gè)功能,EJB層肯定有相應(yīng)的功能接口及其實(shí)現(xiàn)。換而言之,EJB層本身就不是面向?qū)ο蟮模械墓δ芏剂闵⒌胤植荚诟鱾€(gè)EJB中。例如一個(gè)叫做Customer的EJB提供了客戶購(gòu)買產(chǎn)品、退貨、更換等邏輯的實(shí)現(xiàn),一個(gè)叫做PRodUCt的EJB提供了產(chǎn)品定義、價(jià)格定義等邏輯的實(shí)現(xiàn)。
  
  當(dāng)軟件開發(fā)進(jìn)行到后期的時(shí)候,由于業(yè)務(wù)量越來越大,各個(gè)EJB也變得越來越臃腫與龐大,一個(gè)EJB里面經(jīng)常塞滿了看起來差不多,但又不完全一致的方法——整個(gè)EJB層成為一個(gè)包羅反象、無所不能卻又混亂不堪的怪物。
  
  幸好,由于有完備的文檔支持,整個(gè)項(xiàng)目沒有失控,各個(gè)EJB雖然越來越大,越來越“面向過程”,但整體的功能實(shí)現(xiàn)還是得到了保證。最終項(xiàng)目驗(yàn)收的時(shí)候,雖然整個(gè)軟件不“很好看”,但也在功能、速度和成本方面達(dá)到了基本要求。
  
  漫長(zhǎng)的維護(hù)期開始了……
  
  經(jīng)過這次不能說成功或失敗的開發(fā)經(jīng)歷后,我有了一點(diǎn)想法:
  
  1.使用EJB這種侵入型框架時(shí),一定要先對(duì)業(yè)務(wù)進(jìn)行細(xì)分,將各個(gè)大功能項(xiàng)劃分開。
  2.在功能細(xì)分的基礎(chǔ)上,建立相應(yīng)的業(yè)務(wù)對(duì)象模型,每個(gè)業(yè)務(wù)對(duì)象負(fù)責(zé)一類事務(wù)的處理。例如上文中的CustomerBean類其實(shí)應(yīng)該作為一個(gè)獨(dú)立的業(yè)務(wù)對(duì)象存在,而不是作為一個(gè)被隨意調(diào)用的EJB存在。
  3.客戶端調(diào)用EJB時(shí),不是對(duì)具體功能的調(diào)用,而是通過轉(zhuǎn)發(fā)的方式,對(duì)業(yè)務(wù)對(duì)象進(jìn)行調(diào)用。客戶端只是簡(jiǎn)單的將參數(shù)傳遞給EJB,然后由EJB負(fù)責(zé)業(yè)務(wù)對(duì)象的初始化(或以其他形式得到業(yè)務(wù)對(duì)象),然后將參數(shù)傳遞給業(yè)務(wù)對(duì)象,生成結(jié)果后再返回給客戶端。EJB在這里只是起轉(zhuǎn)發(fā)的作用。
  
  這樣做可以解決EJB層責(zé)任混亂的問題。
  
  在以前的設(shè)計(jì)中,EJB層負(fù)責(zé)對(duì)傳入數(shù)據(jù)的解釋,然后調(diào)用所有的業(yè)務(wù)邏輯,最后對(duì)生成結(jié)果進(jìn)行包裝,返回給客戶端。而且整個(gè)過程由于是采用硬編碼的形式寫在了一個(gè)函數(shù)中,因此重用的可能性不大。
  
  在新的設(shè)計(jì)中,由于一次客戶端操作經(jīng)常是由多次原子型操作(從業(yè)務(wù)層面看)組成的,因此可以把這些業(yè)務(wù)流程的控制邏輯放在EJB層中,并負(fù)責(zé)對(duì)客戶端傳入結(jié)果的解釋以及對(duì)返回給客戶端的結(jié)果進(jìn)行包裝。因此,EJB層相當(dāng)于是一個(gè)解釋器+業(yè)務(wù)邏輯組織者的角色,它將業(yè)務(wù)邏輯的實(shí)現(xiàn)推遲到了各個(gè)業(yè)務(wù)對(duì)象中來實(shí)現(xiàn),同時(shí)有利于各個(gè)業(yè)務(wù)對(duì)象中業(yè)務(wù)邏輯的重用。
  
  下一步關(guān)注的重點(diǎn):
  1.采用Spring框架對(duì)業(yè)務(wù)邏輯對(duì)象組織方式產(chǎn)生的影響
  2.使用OR Mapping對(duì)業(yè)務(wù)邏輯對(duì)象組織方式產(chǎn)生的影響

發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 濮阳县| 奉节县| 桐乡市| 武冈市| 佛冈县| 万山特区| 清水河县| 丽水市| 大埔县| 西贡区| 南投市| 无极县| 肥乡县| 柞水县| 永靖县| 延川县| 陕西省| 宜都市| 遂宁市| 缙云县| 封开县| 汾西县| 德江县| 佳木斯市| 新竹市| 宝应县| 枣阳市| 衡南县| 济南市| 广水市| 加查县| 紫阳县| 龙陵县| 冷水江市| 错那县| 商都县| 海伦市| 华坪县| 赫章县| 乌苏市| 永年县|