來討論一下framework吧,
說真的我都快被 framework 給搞昏了,底子太差。-.-a
以前我覺得有必要再碰framework,加上手邊資訊不多,
所以遲遲沒有碰,現在工作有機會用上了,來寫點東西分享/討論一下。
────────────────────────────────
由於我是直接看前輩code寫code,所以很多基礎觀念可能有點偏差,
除了webwork跟hibernate的部份有q老大帶過應該還沒忘光以外,
還請大家不吝指教。 =.=a
來講一下我的認知,
webwork ->
設定actionName、actionClass跟jsp檔案的關聯
簡單的類比就是先接到一個servlet處理完後,
再用處理完的變數跑jsp,得到呈現後的結果,
做兩層的用意在於可以把一些複雜的運算在jsp前就已經先處理好,
jsp就可以專心做view端的顯示。
我能想到的優缺點:
如果是同一個頁面同一份資料需要拆成多個子頁面,
比方說像是ajax 載入可能就會拆成一個頁面中多個子資料區,
就可以採用多個actionName指向同一個actionClass中的不同method,
達到後端套版不用再做一次,也不需要再多寫一個檔案。
(傳統jsp的作法應該是直接在創一個jsp起來寫,這裡可以省這個功。)
另外就是像pagenotfound之類的狀態過濾也可以在這裡做。
他主要需要維護的設定檔->xwork.xml
Hibernate
嚴格來說他不只是J2EE的framework,用途是把資料庫的處理物件化的
O-R Mapping(Object-Relation-Mapping)工具。
為達成這個目標他把物件至少分成兩層,一個叫Model層,
通常在model層你會有一個成員完全對照資料庫中某個表格的物件。
(當然,你必須要再撰寫一個.hbm檔來告訴hibernate他的成員關係,
這部份有一些自動化工具可以幫忙,如先前所介紹過的xdoclet。)
有model後再來就是要讓model活起來,需要的就是處理model的物件,
也就是DAO (Data Access Object),他可以幫你簡化CRUD的內容。
再上去通常還會再有一層manager,
可以再對DAO做到比CRUD更高層級的包裝。
在這裡應該還要有交易(transcation)概念,
不過這部份我並沒有學的很好,所以先不談。Orz
他需要維護的設定檔-> *.hbms
以及一個告訴hibernate要讀哪些hbm設定檔的設定檔
(我不確定這個檔案叫什麼,我只知道我們公司的作法。XD)
Spring
用來管理你Action、Dao中所需要用到的任何通用成員的初始化,
比方說我今天MessageBoardAction(留言板行為)
可能需要 MessageDao(留言)、UserDao(使用者)兩者的協助,
我就可以在Spring中先把MessageDao、UserDao所需要的資源先寫好,
再寫action-beans把MessageDao、UserDao給引進MessageBoardAction。
這樣我就可以不用在MessageBoardAction想方設法,
去把MessageDao 跟UserDao給new出來。
當然Spring本身有提供一些操作用的Template。
要維護的設定檔-> action-beans.xml ...等等等等
(他是設定檔最多的=.=)
────────────────────────────────
基本上設定檔的部份是目前最干擾我的,常常寫完之後忘記哪裡要改那個
config,跑完之後出錯誤才想到。...orz
framework能幹麻,他怎麼去幫我們簡化*這些工作,
是我在還沒有接觸framework之前最關心的事情,
既然現在略窺一二,就拿出來一起討論一下。
*註簡化不全是指減少,有時也指維護或擴充時較為簡易)
---
不過我是覺得framework並不是新手入門的好幫手,或者不用學習的工具,
(也就是你不會聽到學JSP/servlet幹嘛,直接學Framework就好的言論。)
他是一種把已經做到令人厭煩的事情用某種方式給包裝起來,
達到更快速更「乾淨」的思維空間,他並不代表easy,而是simplicity。
--
I am a person, and I am always thinking .
Thinking in love , Thinking in life ,
Thinking in why , Thinking in worth.
I can't believe any of what ,
I am just thinking then thinking ,
but worst of all , most of mine is thinking not actioning...
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 220.134.27.68
※ 編輯: TonyQ 來自: 220.134.27.68 (06/20 05:28)