第一章 java應用分層架構及技術模型
1 hibernate是什麼
A 它是連接java應用程序和關係數據庫的中間件
B 它對JDBCAPI進行了封裝,負責java對象的持久化
C 對分層的軟件架構中它位於持久化層,封裝了所有數據訪問細節,使業務邏輯層可以專注於實現業務邏輯
D 它是一種ORM映射工具,能夠建立面向對象的領域模型和關係數據庫模型直接的映射
1.1應用程序的分層體系結構
三層應用程序
A表現層:提供與用戶交互的界面。GUI(Graphical User Interface,圖形用戶界面)和基於瀏覽器的Web頁面時表述層的兩個典型的例子。
B業務邏輯層:實現各種業務邏輯。
C數據層:負責存放和管理應用的持久化業務數據
1.1.1區分物理層和邏輯層
1。物理分層即每一層都運行在網絡的單獨的機器的單獨節點上,意味着創建分佈式軟件系統
2。邏輯分層:指的每一層有一個相對獨立的軟件模塊來實現,它能完成特定的功能。
1.1.2軟件層的特徵
A每個層由一組相關的類或組件構成,共同完成特定的功能
B 層與層之間存在自上而下的依賴關係,即上層組件會訪問下層組件的API,而下層組件不應該依賴上層組件。
C每個層對上層公開API,但具體的實現細節對外透明
基本特徵就是層與層之間存在自上而下的依賴關係
軟件層向上公開接口封轉實現細節
1.1.3軟件分層的優點
1.伸縮性
伸縮性指應用程序是否能支持更多的用戶。應用的層越少,可以增加資源(如CPU和內存)的地方就越少。層數越多,可以將每層分佈在不同的機器上
2.可維護性
可維護性指的是當發生需求變化,只需修改軟件的某一部分,不會影響其他部分的代碼。
3.可擴展性
可擴展性指的是在現有系統中增加新功能的難易程度。層數越多,就可以在每個層中提供擴展點,不會打破應用的整體框架。
4.可重用性
可重用性指的是程序代碼沒有冗餘,同一個程序能滿足多種需求。例如,業務邏輯層可以被多種表述層共享。
5.可管理性
可管理性指的是管理系統的難易程度。將應用程序分爲多層後,可以將工作分解給不同的開發小組,從而便於管理。應用越複雜,規模越大,需要的層就越多。
1.1.4軟件分層的缺點
對開發人員的要求越來越高;調試困難
1.1.5Java應用的持久化層
1.2軟件的模型
在軟件開發領域,模型用來表示真實世界的實體。
在軟件開發的不同階段,需要爲目標系統創建不同類型的模型:
在分析階段,需要創建概念模型。
在設計階段,需要創建域模型和數據模型。
模型之間的關係
1.2.1概念模型
概念模型用來模擬問題域中的真實實體。
概念模型描述了每個實體的概念和屬性,以及實體之間的關係。
概念模型並不描述實體的行爲。
不管是技術人員還是非技術人員都能看得懂概念模型,他們可以很容易的提出模型中存在的問題,幫助系統分析人員及早對模型進行修改。
實體與實體之間存在三種關係
Customer和Order實體: 一對多。一個客戶有多個訂單,而一個訂單隻能屬於一個客戶。
Category和Item實體:多對多。一個商品類別包含多個商品,而一個商品可以屬於多個商品類別。
Order和Item實體:多對多。一個訂單包含多個商品,而一個商品可以屬於多個訂單。
Customer和ShoppingCart實體:一對多。一個客戶有多個購物車,而一個購物車只能屬於一個客戶
ShoppingCart和Item實體:多對多。一個購物車包含多個商品,而一個商品可以屬於多個購物車。
1.2.2關係數據模型
關係數據模型是在概念模型的基礎上建立起來的,用於描述這些關係數據的靜態結構,它由以下內容組成:
一個或多個表
表的所有索引
視圖
觸發器
表與表之間的參照完整性
表的主鍵
在關係數據庫表中,用主鍵來識別記錄並保證每條記錄的惟一性。作爲主鍵的字段必須滿足以下條件:
不允許爲null。
每條記錄具有惟一的主鍵值,不允許主鍵值重複。
每條記錄的主鍵值永遠不會改變。
使用代理主鍵機制,代理主鍵不具有業務含義,不會被改變。
1.2.3域模型
域模型是面向對象的。在面向對象術語中,域模型也可稱爲設計模型。域模型由以下內容組成:
具有狀態和行爲的域對象
域對象之間的關係
關聯
依賴
聚集
一般化
1.2.4域對象
域對象可以代表業務領域中的人、地點、事物或概念。域對象分爲以下幾種:
實體域對象:業務領域的名詞
過程域對象:業務領域的動詞
事件域對象:業務領域中的事件
1。實體域對象
實體對象可以代表人、地點、事物或概念。例如客戶、訂單、商品等作爲實體域對象。
在Java EE應用中,這些名詞可以作爲實體EJB。
對於普通的Java應用,這些名詞可以作爲包含狀態和行爲的JavaBean。採用JavaBean形式的實體域對象也稱爲POJO(Plain Old Java Object)。
爲了使實體域對象與關係數據庫表中記錄對應,可以爲每個實體域對象分配惟一的OID(Object Identifier,即對象標識符),OID是關係數據庫表中的主鍵(通常爲代理主鍵)在實體域對象中的等價物。
2.過程域對象
過程域對象代表應用中的業務邏輯或流程。它們通常依賴於實體域對象。
可以把業務領域中的動詞,例如客戶發出訂單、登入應用等作爲過程域對象。
在Java EE應用中,它們通常作爲會話EJB或者消息驅動EJB。
在非Java EE應用中,它們可作爲常規的JavaBean,具有管理和控制應用的行爲。
過程域對象也可以擁有狀態,例如在J2EE應用中,會話EJB可分爲有狀態和無狀態兩種類型。
3事件域對象
事件域對象代表應用中的一些事件(如異常、警告或超時)。這些事件通常由系統中的某種行爲觸發。
例如在多用戶環境中,當一個客戶端程序更新了某種實時數據,服務器端程序會創建一個事件域對象,其他正在瀏覽相同數據的客戶端程序能夠接受到這一事件域對象,隨即同步刷新客戶界面
1.2.5域對象之間的關係
關聯(Association):指類的引用關係,包括一對一,一對多,多對多
依賴(Dependency):類的訪問關係。往往出現在過程域對象依賴實體域對象
聚集(Aggregation):是指整體與部分之間的關係,在實體域對象之間是常見的。
一般化(Generalization) :一般化指的是類之間的繼承關係
1.2.6域對象的持久化概念
域對象的持久化概念
狹義的理解,“持久化”僅僅指把域對象永久保存到數據庫中
廣義的理解,“持久化”包括和數據庫相關的各種操作:
保存:把域對象永久保存到數據庫中。
更新:更新數據庫中域對象的狀態。
刪除:從數據庫中刪除一個域對象。
加載:根據特定的OID,把一個域對象從數據庫加載到內存中。
查詢:根據特定的查詢條件,把符合查詢條件的一個或多個域對象從數據庫加載到內存中。