09.10 層次架構的困惑

介紹一下項目的現狀先:

大體介紹:

表示層使用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,以便請求修改時知道所修改的是哪個記錄?

老師們,耽誤時間指點一下了...多謝!

層次架構的困惑


分享到:


相關文章: