您好,登錄后才能下訂單哦!
這篇文章主要介紹了javaweb業務層應該如何寫,具有一定借鑒價值,需要的朋友可以參考下。希望大家閱讀完這篇文章后大有收獲。下面讓小編帶著大家一起了解一下。
業務層
Service層:引用對應的Dao數據庫操作,在這里可以編寫自己需要的代碼(比如簡單的判斷)。
service層是調用各種dao的業務操作,比如你有一個業務是添加,然后修改。 那么你分別調用dao的添加和修改操作,包括里面的一些數據轉換,邏輯判斷都放到service層,dao只是單純的增刪改查。 而且事務一般會放到service層。
其中Service層和DAO層由于可能都會對數據庫進行操作,其具體區別為:
dao和service對應
一般情況下,Hibernate DAO只操作一個POJO對象,因此一個DAO對應一個POJO對象。 Service層是為了處理包含多個POJO對象(即對多個表的數據操作)時,進行事務管理(聲明式事務管理)。Service層(其接口的實現類)被注入多個DAO對象,以完成其數據操作。
Service之有無
這一點我的看法未必正確,我的腦海現在有兩種構建業務層的模式:
模式1是Service + DAO,即DAO中只做CRUD及類似的簡單操作(稱之為功能點,不包含業務邏輯),Service中通過調用一個或多個DAO中的功能點來組合成為業務邏輯.Service的數量應該由功能模塊來決定。
在這種模型中業務邏輯是放在Service中的,事務的邊界也應該在Service中控制. 當然,直接在Service中控制事務會引入非業務邏輯的代碼,幸好Spring的AOP可以解決這個問題,這也是引入Spring的原因之一.
如果說到缺點,就在于對某些對象的操作就是簡單的CRUD,Service層顯得累贅.
模式2是Service + BO, 而BO = DAO + 業務方法, 在原先DAO的基礎上添加業務方法,形成BO對象。需要注意的是BO中的業務方法往往是針對一個實體對象的,如果需要跨越多個實體對象,則方法應該放在Service中。
舉例來說,
一個簡單的銀行帳戶管理系統,創建帳戶這個BO對象,里面可以有修改密碼,取錢等業務方法(不難看出,這些方法都只對單個帳戶對象進行操作)。現在需要添加一個轉賬方法,就應該放在Service中。
這里Service和BO的關系是什么樣的呢?再舉一例:
以國家行政機關為例:糧食局負責收糧,賣種子等,建設部負責審批土地買賣,建設公路等,這都是行政部分份內的事兒。突然某地發了水災,救災時需要糧食局開倉放糧,建設部修建臨時房屋,如何協調兩個部門?就需要成立專門的救災委員會,由救災委員會出面對兩個部分的資源進行調撥。這里兩個部分就是BO,而救災委員會就是Service。不知我的意思是否表達準確了,呵呵。 模式1的在劃分Service和DAO時界限清晰,但會帶來一些無必要的代碼。 模式2的劃分相對復雜,然而可以提高編碼效率。
當然小規模的應用中,沒有Service,完全是DAO或BO也是可以接受的。
Service和DAO的接口之有無
接口是一種契約,它可以有多種實現。所以接口之有無取決于具體實現是否需要多樣化。如果鐵定一種DAO或一種Service只有一種實現,那么抽象出接口的意義不大。然而一些大型應用或許需要DAO和Service的多種實現(比如上面例子中的帳戶DAO,可能需要一種Hibernate實現、一種CMP實現和一種JDO實現),為了向上一層隱藏具體實現類,需要采用接口。
隱藏具體實現類的創建過程,這有兩種方法:一是實用工廠方法,代價是代碼量大(每個DAO和Service一個工廠)。二是使用Spring的IoC,實現依賴注入,不需要寫額外的代碼,這也是引入Spring的理由之二。
感謝你能夠認真閱讀完這篇文章,希望小編分享javaweb業務層應該如何寫內容對大家有幫助,同時也希望大家多多支持億速云,關注億速云行業資訊頻道,遇到問題就找億速云,詳細的解決方法等著你來學習!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。