介紹一下項目的現狀先:
大體介紹:
表示層使用JSP,控制層使用STRUTS2,業務邏輯層使用自己封裝的service類,持久層使用SPRING的JDBCTemplate封裝SQL。
我現在的調用流程是這樣的:
JSP(表單參數[參數形式:model.propertyName])--->ACTION(引用一個實體對象作為成員屬性,struts2框架自動封裝請求參數到實體對象)
--->調用service層的業務邏輯方法(層之間的參數傳遞依然是ACTION中封裝的實體對象)---->service方法處理實體對象(實體對象可能嵌套)並調用多個DAO操作,且封裝事務
--->DAO操作(從service層傳過來的參數依然是ACTION中的實體對象,只是由service處理過了)
也就是說,層與層之間的接口的參數,我都使用了一個實體對象(當然實體對象會有嵌套關係,這樣就可以操作多個實體),
或者在明確了參數僅需要ID的時候,參數為int型的ID(如:根據ID查詢某條記錄的詳細信息時)
有幾個困惑如下:
1.表示層的表單參數的name感覺依賴於實體對象,尤其是實體嵌套的情況,比如某個表單項可能要這樣寫:name=user.department.deptName,甚至更長.
想問一下,這樣好嗎?表單參數和實體類屬性糾纏在一起
2.查詢的時候,我喜歡直接使用spring的jdbcTemplate封裝,使用queryForList等方法,直接返回LIST或MAP,從DAO方法返到SERVICE方法一直到ACTION中,
再將LIST或MAP添加到request中,在JSP頁面上,直接使用EL表達式${list.數據庫字段名}來顯示
這樣有個壞處,表示層直接和數據庫字段扯在一起了...但是確實方便,想請教一下,老師們是怎麼做的?
是不是這樣:DAO負責從數據庫中select數據,並封裝成相應的實體對象或實體對象集合,然後返回到頁面去展示嗎?
3.接著問題2,想問一下,查詢得到的數據,有沒有一種辦法,可以靈活動態的定製字段列表,比如同一個查詢,但是我需要的顯示字段不同,
類似於[粗略展示記錄列表]和[某記錄的詳細信息]這兩種情況
我目前是將所有的字段全查出,封裝成list或map,一併送去表示層,需要的顯示,不需要的就不顯示,這樣應該是浪費傳輸資源的吧...
4.是不是我的這種做法,實體對象就是傳說中的DTO ? 我這種情況是否屬於DTO滿天飛的情況....老師指點啊
5.看了不少相關文章,記得文章中說過,使用Hibernate的情況,實體對象的持久性質(如ID),不應該帶到表示層去,應該剝離持久性質再傳到表示層去顯示...
這裡有個疑問:比如我選中某條記錄進行修改,步驟是:
1.根據選中記錄的ID取出記錄的詳細信息並顯示--->2.修改詳細信息--->3.請求ACTION-->4.業務邏輯-->5.DAO做出修改
其中步驟2修改的頁面中,肯定要保存一個hidden表單項---即該記錄的ID,以便請求修改時知道所修改的是哪個記錄?
老師們,耽誤時間指點一下了...多謝!
閱讀更多 程序員小新人學習 的文章