<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    Javadream

    A long way and a dream.

    網址在這里:http://forum.javaeye.com/viewtopic.php?t=627&postdays=0&postorder=asc&start=0

    說實在的,這是很理想化的設計方案,真的,我的想法也一樣,之所以是這樣,主要是因為我看了一本Struts的書,是奧來理出版的,里面就是這樣的一個概念,雖然那本書里并沒有嚴格按照這樣的思路來做.不過也可以看出這是很完美的,但也是不可取的方案.

    不可取的地方在哪里?性能問題,主要是從Service層上來的實體都可進行數據轉換(DT),生成View層的DTO,單個實體是一次轉換,多個實體,比如set,iterator等,就要n次轉化,而這些僅僅是為了使視圖層和Service層分離,這是不明智的.
    不過這樣的模式的出現也是有原因的.因為應用這個Service層可能會有多樣的客戶端,在適應多種客戶端的就要用到這些東西,比如客戶端是一個Swing GUI程序?那么他需要的是一個序列化的數據包,而這個數據庫僅僅列出的就是健值對,為了設計簡單,這個客戶端就不應該知道服務器端的類以及類的聯系,它僅僅依賴于Service層提攻的DTO,那么就要用到DTO,OK,現在明白robin的設計想法是相當合理,而且重用性很高的.這是大型J2EE程序所常用的方法.

    但對于專用于Web而永遠不打算有其它客戶端的中小Web程序來言,上面的方法已經有些不合時宜了,可以說沒有必要死搬了.也就是說設計應該有所退化,至于退化成什么樣子,是很讓人覺得為難的.我現在的思想是:所有實體對象從最頂層的視圖層到最底層的持久層,都是可以共用的,這樣就不存在DT的問題,那么中間過程是怎么樣的呢?
    我的分法是這樣:

    視圖層
    -----
    控制層
    -----
    服務接口層
    -----
    業務邏輯層
    -----
    持久層
    -----
    數據庫層

    穿梭于其中的數據杻帶是PO,也可以說它是VO.這些層從上往下依賴,比如說持久層依賴于數據庫層,如果數庫的設計有所變化,必然會導至持久層設計發生變化,而持久層也因此影響業務邏輯層,從而產生骨牌效應.雖然這樣的設計是不好的,但是誰能夠解決這樣的事情呢?數據庫這樣最底層最核心的東西都改變了,這必然會影響整個程序的行為,比如說數據庫要求多加一個計錄評分級別的功能,可是原來的程序里沒有這樣的功能,而且所有的調用接口都沒有寫到這方面的功能,那么不就是整個程序只要和這個功能有關的程序文件都要進行修改,這是不可避免的(如果可以避免,請告訴我方法,小弟永生記住您的大恩).

    為什么要分多一個服務接口層?很簡單,主要是把業務邏輯脫離特定的Web框架,不論是在Struts、Webwork、JSF,他們都可正常運行,當然你也可以不要這一層,把業務邏輯寫進Action,這樣從而把程序死死綁定到了某個Web Framework,這樣的好處是,程序的性能有很小的提高,不過苦果是,某一天要改成其它的Web framework呢?我建議的方案是加多一個服務接口層,這樣Action主要的任務就是從接口層取得數據轉到視圖層去顯示,這樣Action的重任就很清楚了,它只是一個控制器而已(笑話,那么這些自稱MVC的框架,啟不只是VC而已?哈…………)

    那么什么是業務邏輯層呢?因為程序并不只是涉及數據庫操作,而且常會伴隨一些文件操作,而這些都是對一實體的一次單元操作,而且是可重用的操作.業務邏輯層就是這樣的單元操作接口,他調用持久層,更確切的說是DAO,得到PO,但后進行相關的操作。

    注意,這里的持久層不是具體到Hibernate的這些ORM,而只是DAO,具體的ORM由具體的DAO實現。

    呵。。。從上面這句話,也許你也會想問一個問題,具體的DAO?對,就是具體的DAO。這里就運用的面向接口編程的思想,層與層之間調用的只是接口而已,每一層都有特定的實現,而這些特定的實現是可插拔的,而且不會影響原程序的運行。你可以用Factory模式生成具體的DAO bean,呵…………這是一個痛苦的過程,而且Factory這樣與程序邏輯無關的東西竟然一躍而上進入了我們的代碼,這不是一個好的方法,我們可以用一種IoC框架,Spring就是一個極好的東西,注入我們想要的DAO bean,這樣我們寫代碼就可以專心對接口編程了,我們就沒有必要擔心什么Factory了,呵……

    那么實體呢?他能接口化嗎?從我現在的所掌握的知識來看,他是不可接口化的,他是數據的載體,也是一些常規操作的載體,也正是因為這樣,他是極其重要也是極其簡單的,所以,他不用接口化。

    好了,終于理清這半年來所思考的東西了,大至上我已經明白怎樣去合理的規范化設計一個程序,現在剩下的只是挑選合適的應用框架,然后做第一個Java Web開發。汗,直到現在我都還沒有真正開發過Java Web程序呢,呵…………

    Feedback

    # re: 如何理解robin的J2EE數據表示?我有自己的異議.  回復  更多評論   

    2006-04-26 17:58 by oxl
    其實理論先行是必要的,也是最好的方法.

    在我身邊很多師弟都是用純JSP寫程序,然后就跑到我跟前大言不慚地說自己會開發J2EE程序了.呵....開始我不懂時還真給蒙了.呵......

    J2EE?與其說去遵守他的規則,不如去退化它,成為自己的規則,既要保持設計靈活,也要保持性能優異.但要做到一點,面向接口的編程.

    正確理解MVC是很費時間的,雖然說起來很簡單,但是在任何一個沒有實踐開發過這樣的程序的人來說是很模糊的概念.我是搞PHP編程出生的,在那種半生不熟的PHP MVC里打過混,甚至寫過自己認為不錯的MVC WEB框架,相當清楚MVC并不好理解,往往會把C和M混淆了.也常把M和P混淆了.然后在不斷的思考和重新理解的過程中,我總結出了上面我認為還算合理的Java Web設計模式.

    快要失業了,我這么一個偽大專生(連大專都不是真的,頂多是中專畢業)就要餓肚子了.希望在我未餓暈之前完成我的程序吧.我想我很快就有作品了,第一個像樣的作品,一個能拿得出手的作品.就業難啊,我現在就在努力呢!!

    # re: 如何理解robin的J2EE數據表示?我有自己的異議.  回復  更多評論   

    2008-08-20 12:42 by zhuzy
    主站蜘蛛池模板: 亚洲一区二区三区91| 中文字幕不卡高清免费| 国产精品无码一二区免费| 伊人久久国产免费观看视频| 国产精品亚洲аv无码播放| 亚洲黄色免费在线观看| 亚洲AV一区二区三区四区| 国产国拍亚洲精品福利| 97碰公开在线观看免费视频| 麻豆91免费视频| 久久久久亚洲AV无码专区体验| 成全视频免费高清| 免费精品一区二区三区第35 | 亚洲日本国产综合高清| 亚洲精品专区在线观看| 亚洲精品在线免费观看视频| 麻豆91免费视频| 亚洲av乱码一区二区三区| 亚洲夜夜欢A∨一区二区三区| 免费无码AV电影在线观看| 中文永久免费观看网站| 亚洲GV天堂GV无码男同| 久久精品蜜芽亚洲国产AV| 亚洲一区精品伊人久久伊人| 国产成人精品免费视频动漫| 久久er国产精品免费观看8| 亚洲中文无码亚洲人成影院| 亚洲AV无码一区二区乱子伦| 国产v片免费播放| 免费A级毛片无码A∨免费| 国产黄色免费观看| 亚洲aⅴ无码专区在线观看| 亚洲黄色一级毛片| 亚洲精品国产字幕久久不卡 | 亚洲AV无码成人精品区天堂| 亚洲福利在线播放| 在线播放免费播放av片| 四虎最新永久免费视频| 免费观看久久精彩视频| 51午夜精品免费视频| 国产亚洲精品免费|