企業級

Part1 軟件架構javascript

「架構」是依據業務設計組件、模塊、框架、類等不一樣粒度的單元將其組合的策略。沒有理想上通用的架構,不一樣的軟系統的着重點不一樣。(業務邏輯複雜、併發性能高、擴展性好)前端

架構五視圖概念:物理架構(安裝、部署需求)、邏輯架構(業務需求)、數據架構(數據需求)、開發架構(代碼擴展、重用需求)、運行架構(運行性能安全需求)。java

開發中須要挖掘、分析清需求,利用多視圖設計出架構模型。最後轉換成組件、模塊  、接口、類進行驗證。git

RUPweb

需求分析創建用例圖爲用例添加規約。(用例描述)spring

製做原型界面確認需求。數據庫

編寫SRS文檔。apache

RUP在迭代中找出風險性最大架構問題,儘可能減小風險,XP裏由核心用戶故事來驅動)編程

領域建模與需求分析同步進行。json

模型創建與領域專家交流。

精化領域模型設計模塊、接口、類。

 

概念架構分層,層次中加入魯棒圖分析。

 

 

 

Part2架構模式

三層架構:表現層、領域層、數據層,後兩層絕對不要依賴表現層。

組織領域邏輯三種模式:事務腳本、表模塊、領域模型,儘可能使用領域。

領域模型粒度儘可能小。

避免實體bean重進入。(一個對象改變了bean狀態,不該再被另外一個對象使用)

可在領域層加薄服務層提供接口與客戶層鏈接。

 

數據訪問建議:

控制粒度儘可能減小數據庫訪問次數,使用join避免屢次進入,利用ormaping框架,使用鏈接池。

合理設計數據表繼承結構。

(三範式 1nf字段不可再分 2nf非關鍵字依賴本身關鍵字 3nf 不存在傳遞依賴 )

先領域模型設計而不是先設計數據庫表

避免長事務,減小事務隔離提升靈活。

 

數據源架構:表數據入口(表對應記錄集)、行輸入入口(行對應類)、活動記錄(同行輸入入口將邏輯加入類)、數據映射器(數據對應領域對象)

反射編寫數據映射器或使用開源mapping工具

使用mapping設計時注意對象的工做單元、標識域、繼承、延時加載、緩存

備忘數據可對象序列化(類對象、jsonxml)保存BLOB

 

 

 

表現層之web

模型(對象)

頁面控制器(跳轉)、前端控制器(interpret filer、裝飾)、應用控制(邏輯調用)

模板視圖、轉換視圖

 

客戶端會話cookie (可加密防篡改)

服務端會話 session (佔內存可序列化保存)

數據庫會話 建臨時字段(狀態保存與 客戶端、服務端會話數據比較)

 

 

Part3輕量架構

發展:

EJB測試困難嚴格的單元測試和測試驅動開發TDD日益變流行。

開發人員不斷尋找更簡單的EJB代替品。J2eeservletjspjmsrmijdbc都是好的規範惟獨ejb

架構知足業務需求的能力以經驗評測,不是全憑主觀臆斷、一廂情願。

Xp教咱們怎麼思考。

 

EJB服務:目錄JNDI、事務JTSJTA、鏈接JCA、資源池、線程管理、entity bean

HibenateJDO代替entity bean

AOP(spring)聲明式事務

業務對象線程池緩存:web應用時Web容器提供線程池無需再業務層在提供,只有用RMI才須要。

 

開發指導:

參考架構:開源框架中的模板,若是你的模板是基於一個應用(sun java PetStore)而不是一個框架結果多半失敗。

工具:eclipseintellijsvngitjunitantmavenspringjdohibernatestruts

 

 

業務服務層:接口形式、oo、內部機制不該過複雜、獨立表現層、不直接與數據層打交道、有事務管理、易測試、可伸縮性、儘可能無狀態(如把狀態保存web層)、ioc達到接口現實分離

業務對象和表現組建運行在同一jvm,因此搭建集羣部署到新jvm實現水平擴展。

活動記錄在領域對象中包含數據訪問邏輯,是entity bean和傳統持久化框架使用的方法。

數據映射器包含全部持久化邏輯。TOPLINK經過共享緩存訪問讀取對象,若是不爲對象克隆就不能修改對象不然會破壞共享緩存。

業務邏輯框架選用spring;支持遠程客戶端可用hessianbutlapweb servicesoap服務apache axisclue);

不少web應用沒有清晰的業務服務層,每每依附web層框架(如struts);

OO編程模式很難處理一些與實際正交需求(如:安全性)而spring經過AOP能解決。  

AOPOOP的補充,橫切方法攔截。

把精力集中在問題領域上而不是技術自己。

DTOVO都是僞對象盡少使用,OO原則很重要

 

 

表現層:業務邏輯獨立於表現層。

Web應用web層:(expert one on one j2ee design and development 1213章)

技術strutswebworkmaverickjspvelocityjavascript

 

Servlet+jspmvc

 

 

 

數據層:使用o/r mapping工具使得領域對象可包含業務邏輯,領域模型就是有對象而不是啞數據容器構成了。

  

EJB 無狀態會話Bean SLSB)的審視:

聲明性事務管理:spring提供基於AOP的聲明事務管理,支持多數據庫的JTAJDBC,回滾規則配置,編程性事務。

遠程調用:web應用中將web組件和業務組件方在同一JVM比較好,須要遠程調用暴露web services接口可行。

集羣:EJB有狀態會話bean的集羣能力差,一般集羣可經過J2eeweb容器、web

服務器或者硬件設備處理。

線程管理:實現不讀寫實例變量的多線程服務對象這種方法在servletsturts action中工做的很是完美,使用命令模式爲每一個請求建立實例消除對象內部併發,使用java同步、併發庫。

實例池:slsb緩衝池是節省內存,spring實例池commonsPoolTargeSourse,如今jvm垃圾收集效率高內存也便宜。

資源管理:將數據庫鏈接放入資源池,dbcp等作得很好。

安全:用AOP實現聲明性自定義安全性,自定義安全攔截器。

業務對象管理:Spring做爲對象工廠,spring提供緩衝池,ioc功能代替jndi查找。

 

開源方案:

Ao--SpringNanning AspectesJboss4

Ioc--SpringPicoContainer(可與Nanning集成)、HiveMind

O/R--HibernateJDOiBatis

Web service--GLUE

 

性能:

響應時間:應用程序處理一個請求的時間(如http請求)

延時時間:從應用程序獲得反饋所需最小時間。

吞吐量:一段時間內所能進行的工做總和,web應用經常使用每秒點擊率衡量,事務處理程序則是每秒完事務數。

可伸縮性:指應用程序如何對應增加流量。可伸縮常等價於水平伸縮性(向上伸縮)集羣是一種。垂直伸縮在每臺服務器上運行多份服務,如添加cup、內存。

緩存(能夠進行緩存的地方):數據庫、O/R mapping、業務對象(業務層用aop緩存)、web層對象、過濾器與jsp標籤緩存、HTTP頭控制瀏覽器web緩存

優化:控制繼承樹深度、直接訪問字段而非方法訪問、用局部變量代替實例變量、去除沒必要要log

 

Spring

Spring是一個應用框架而不是webiocaop或者中間層框架什麼的。

國人應用框架jdom

Bean工廠:依賴注入

應用上下文:在bean工廠基礎上增長對信息

 

 

 

 

 

Part4敏捷

Part5領域驅動

相關文章
相關標籤/搜索