企業對外提供服務,一般藉助於軟件應用。好比交易零售系統,用來提供購買商品的服務,這裏就涉及到交易數據,這些數據會被用戶「反覆」的產生、查看,並且隨着服務時間增加,應用自己也會面臨困難算法
架構是一種主觀上的東西,是對系統設計的一些可共享的「主觀理解」,可共享性表如今系統中主要的組成部分以及他們之間的交互關係。對架構的定義可以統一的內容有兩點:數據庫
模式描述了一個在咱們周圍不斷重複發生的問題以及該問題解決方案的核心,這樣可以一次又一次的使用該方案而不用作重複的勞動json
層次模型致力於將企業應用組織成不一樣的層次,並協調各層次之間的關係後端
這裏的層次是邏輯上的,不必定是物理上的隔離,全部層能夠在1個服務器上,也能夠是多個物理機安全
有三種組織形式 事務腳本、領域模型、表模塊。服務器
他們之間並不互相排斥,能夠在事務腳本中處理部分領域邏輯,同時使用表模塊或者領域模型來處理剩下的部分架構
使用過程來組織業務邏輯,每一個過程處理來自表現層的單個請求。簡單的來講就是從表示層得到輸入、進行校驗和計算處理、將數據存儲到數據庫中以及調用其它系統的操做等等性能
合併了行爲和數據的領域的對象模型(每一個類都有行爲和數據,類之間交互來完成任務)。簡單來講就是每一個對象都承擔一部分相關邏輯設計
處理某一數據庫表或視圖中全部行的業務邏輯的實例,它處於領域模型和事務腳本的中間地帶對象
案例:對於一個給定的合同,不一樣的產品種類有不一樣的收入確認算法,須要計算給定合同的收入
事務腳本與領域模型的區別:
表模塊與領域模型的區別:
獨立出一個服務層放在領域模型與表模型之上,服務層自己有3種形式
能夠在有要的時候才加服務層,若是加了也要最小化
以數據庫的表結構爲基礎,每張表對應一個類,這種類爲數據庫訪問提供了’入口‘。
應用程序其它部分就不須要關心SQL
入口使用方法有兩種
在簡單的領域模型中,模型自己和表至關一致,這時可讓領域對象自己去負責數據庫的存儲過程(也稱做活動記錄),它實際就是以行數據入口開始,把領域邏輯加入到類中,可是當領域模型複雜時,入口能夠解決一些問題,可是這實際上是讓數據庫方案和領域方案冗餘在一塊兒,致使部分入口域和領域對象域的轉換,使得領域對象變得複雜,這時可使用數據映射器,它來處理數據庫和領域模型之間的全部存取操做,而且容許兩者獨立變化,使兩者徹底獨立
使用活動記錄可以解決簡單的讀取和存儲操做,可是涉及到讀取同時修改再存儲等複雜操做,必須保證數據庫的一致性,這種狀況就能夠工做單元解決。
工做單元用來充當數據庫映射的控制器,它會跟蹤全部從數據庫讀取對象以及任何形式修改對象,同時也負責從新提價到數據庫。
簡單的狀況是由領域本身來完成,複雜狀況則是交給了工做單元來作
表結構以前通常存在着 一對多,多對多這種結構,對象也須要處理好這種映射關係,方法則是在對象中使用一個標識域來保持對象之間的關係特性,並經過查找這些值來保持對象引用與關係鍵之間的映射。
並非全部的關係都須要外鍵與關係域這種映射,若是值對象很小,可使用序列化的方式直接存儲到關聯對象的一列中
對象自己存在繼承關係,這個時候將這種結構映射到表中一般有如下三種方式:
類表繼承一般須要多個鏈接,損失了性能;具體表該表很麻煩,一旦父類變動,全部的表都得改動;單表存在着空間浪費,單表過大也影響性能,可是修改容易並且不用鏈接
根據應用場景選擇具體方式
模板視圖:在網頁結構中編寫表現層,並容許在網頁中嵌入標籤,用以指明網頁中的動態內容須要導向哪裏,好比JSP 轉換視圖:將領域層返回的數據轉換到表現成對應的結構位置上,好比根據後端的json數據反映到對應的樣式表單
單階視圖:爲每一個屏幕準備一個視圖組件,視圖提取領域數據並把它返回到HTML網頁中 兩階視圖:首先根據領域數據產生一個邏輯屏幕,而後發往HTML網頁。每一個屏幕自己都已經有了一個第一階段的視圖,而程序中只有一個第二階段的視圖
兩階視圖能夠決定把什麼樣的HTML網頁用在什麼地方,另外多端(PC/PAD/手機)經過不一樣的邏輯屏幕可以展現不一樣的外觀視圖
<企業應用架構模式> 1-4 章