java企業系統架構選擇考量,java系統架構設計詳解

本文目錄一覽:

大型java web系統架構該如何設計

其實操作起來不難。

”健壯性“:用現成的流行的框架。大家實踐檢驗過的一定很robust。

”拓展性“:就是說你要對你用的框架很熟,要明白原理,甚至可以自己修改,實現功能。這個要花時間下功夫。

“易維護”:寫好注釋,做好文檔。平時稍微用點心就可以做好。

“版本控制”:這有現成的工具,比如git。

java 系統架構

開始的架構設計也是最難的,需要調研同類產品的情況以及技術特徵,了解當前世界上對這種產品所能提供的理論支持和技術平台支持,再結合自己項目的特點(需要透徹的系統分析),才能逐步形成自己項目的架構藍圖。

比如要開發網站引擎系統,就從Yahoo的個人主頁生成工具 到虛擬主機商提供的網站自動生成系統,以及IBM Webphere Portal的特點和局限 從而從架構設計角度定立自己產品的位置。

好的設計肯定需要經過反覆修改,從簡單到複雜的循環測試是保證設計正確的一個好辦法。

由於在開始選擇了正確的方向,後來項目的實現過程也驗證了這種選擇,但在一些架構設計的細部方面,還需要對方案進行修改,屬於那種螺旋上升的方式,顯然這是通過測試第一的思想和XP工程方法來實現的。

如果我們開始的架構設計在技術平台定位具有一定的世界先進水平,那麼,項目開發實際有一半相當於做實驗,是研發,存在相當的技術風險。

因此,一開始我們不可能將每個需求都實現,而是採取一種簡單完成架構流程的辦法,使用最簡單的需求將整個架構都簡單的完成一遍(加入人工干 預),以檢驗各個技術環節是否能協調配合工作(非常優秀先進的兩種技術有時無法在一起工作),同時也可以探知技術的深淺,掌握項目中的技術難易點。這個過 程完成後,我們就對設計方案做出上面的重大修改,豐富完善了設計方案。

設計模式是支撐架構的重要組件

架構設計也類似一種工作流,它是動態的,這點不象建築設計那樣,一開始就能完全確定,架構設計伴隨着整個項目的進行過程之中,有兩種具體操作保證架構設計的正確完成,那就是設計模式(靜態)和工程項目方法(RUP或XP 動態的)。

設計模式是支撐架構的一種重要組件,這與建築有很相象的地方,一個建築物建立設計需要建築架構設計,在具體施工中,有很多建築方面的規則和模式。

我們從J2EE藍圖模式分類中就可以很清楚的看到J2EE這樣一個框架軟件的架構與設計模式的關係。

架構設計是骨架,設計模式就是肉

這樣,一個比較豐富的設計方案可以交由程序員進一步完成了,載輔助以適當的工程方法,這樣就可保證項目的架構設計能正確快速的完成。

時刻牢記架構設計的目標

由於架構設計是在動態中完成的,因此在把握架構設計的目標上就很重要,因此在整個項目過程中,甚至每一步我們都必須牢記我們架構設計的總體目標,可以概括下面幾點:

1. 最大化的重用:這個重用包括組件重用 和設計模式使用等多個方面。

比如,我們項目中有用戶註冊和用戶權限系統驗證,這其實是個通用課題,每個項目只是有其內容和一些細微的差別,如果我們之前有這方面成功研發經 驗,可以直接重用,如果沒有,那麼我們就要進行這個子項目的研發,在研發過程中,不能僅僅看到這個項目的需求,也要以架構的概念去完成這個可以稱為組件的 子項目。

2. 儘可能的簡單明了:我們解決問題的總方向是將複雜問題簡單化,其實這也是中間件或多層體系技術的根本目標。但是在具體實施設計過程中,我們可能會將簡單問題複雜化,特別是設計模式的運用上很容易范這個錯誤,因此如何儘可能的做到設計的簡單明了是不容易的。

我認為落實到每個類的具體實現上要真正能體現系統事物的本質特徵,因為事物的本質特徵只有一個,你的代碼越接近它,表示你的設計就是簡單明了, 越簡單明了,你的系統就越可靠。更多情況是,一個類並不能反應事物本質,需要多個類的組合協調,那麼能夠正確使用合適的設計模式就稱為重中之重。

我們看一個具備好的架構設計的系統代碼時,基本看到的都是設計模式,寵物店(pet store)就是這樣的例子。或者可以這樣說,一個好的架構設計基本是由簡單明了的多個設計模式完成的。

3. 最靈活的拓展性:架構設計要具備靈活性 拓展性,這樣,用戶可以在你的架構上進行二次開發或更加具體的開發。

要具備靈活的拓展性,就要站在理論的高度去進行架構設計,比如現在工作流概念逐步流行,因為我們具體很多實踐項目中都有工作流的影子,工作流中有一個樹形結構權限設定的概念就對很多領域比較通用。

樹形結構是組織信息的基本形式,我們現在看到的網站或者ERP前台都是以樹形菜單來組織功能的,那麼我們在進行架構設計時,就可以將樹形結構和 功能分開設計,他們之間聯繫可以通過樹形結構的節點link在一起,就象我們可以在聖誕樹的樹枝上掛各種小禮品一樣,這些小禮品就是我們要實現的各種功 能。

有了這個概念,通常比較難實現的用戶級別權限控制也有了思路,將具體用戶或組也是和樹形結構的節點link在一起,這樣就間接實現了用戶對相應功能的權限控制,有了這樣的基本設計方案的架構無疑具備很靈活的拓展性。

Java架構設計

軟件架構作為一個概念,體現在技術和業務兩個方面。

從技術角度來說:軟件架構隨着技術的革新不斷地更新其內容,軟件架構建立於當前技術和一些基本原則的基礎之上。

先說一些基本原則:

分層原則:分層是為了降低軟件深度複雜性而使用的關鍵思想,就像社會有了階級一樣,軟件有了層次結構。

模塊化原則:模塊化是化解軟件廣度複雜的必然手段,模塊化的目的就是讓軟件分工。

接口實現分離原則隨着軟件模塊化的不斷深入改進,面向接口編程而不是面向實現編程可以讓複雜度日趨增高的軟件降低模塊之間的耦合度,從而讓各模塊更輕鬆改進。從這個原則出發,軟件也從微觀進行了細緻的規範化。

還有兩個比較小但很重要的原則:

細節隱藏原則很顯然把複雜問題簡化,把難看的細節隱去,能讓軟件結構更清晰。其實這個原則使用很普遍,java/c++語言中的封裝原則以及設計模式中的Facade(外觀)模式就很能體現這個原則的精神。

依賴倒置原則隨着軟件結構的進一步發展,層與層之間、模塊與模塊之間的依賴逐漸加深,而層、模塊的動態可插拔要求不端增大。依賴倒置原則可看視 為接口實現分離原則的深化,根據此原則的精神,軟件進入了工具時代。這個原則有點類似於知名的好萊塢法則:Don’t call us, we’ll call you。

以上這些原則奠定了我們的軟件架構的價值指標。但軟件架構畢竟是建立在當前技術之上的。而每一代技術都有架構模式。過去的不再說了,讓我們現在就來看一下當前流行的技術,以及當前我們能採用的架構。

因為面向對象是當前最流行開發技術,且設計模式的大量使用使面向對象的走向成熟,而數據庫是當前最有效的存儲結構、web界面是當前最流行的用 戶接口,所以當前最典型的三層次架構就架構在以上幾項技術的基礎之上,用數據庫作存儲層、用面向對象來實現業務層、用web來作為用戶接口層。我們從三層 次架構談起:

因為面向對象技術和數據庫技術不適配,所以在標準三層次架構的基礎上,我們增加了數據持久層,來管理O-R雙向映射,但目前一直沒有最理想的實 現技術。cmp和entity bean技術因為其實現複雜,功能前景有限,已接近被淘汰的邊緣。JDO及hibernate作為o-r映射的後期之秀,尤其是hibernate,功能 相當完備。推薦作為持久層的首選

在業務層,因為當前業務日趨負載,且變動頻繁,所以我們必須有足夠敏捷的技術來保證我們的適應變化的能力,在標準j2ee系統中session bean負責業務處理,且有不錯的性能表現,但採用ejb系統對業務架構模式改變太大,且其複雜而昂貴,業務代碼移植性差。而spring 作為一個bean配置的輕量級架構,漂亮的IOC模式實現,對業務架構影響小,所以推薦作為中間層業務框架。

在用戶結構層,雖然servlet/jsp/jstl/javaBean 能夠實現MVC架構,但終究過於粗糙。struts對MVC架構的實現就比較完美,Taperstry也極好地實現MVC架構,且採用基於事件的方式,非 常誘人,惜其不夠成熟,我們仍舊推薦struts作為用戶接口層基礎架構。

因為業務層是三層次架構中最有決定意義的,所以讓我們回到業務層細緻地分析一下,在複雜的業務我們常常需要以下基礎服務的一種或幾種:事務一致 性服務acid(tool:jta/jts)、並發加鎖服務concurrentlock、池化管理服務cache、訪問控制服務 (tool:jaas)、流程控制服務workflow、動態實現服務IOC,串行化消息服務(tool:jms)、負載平衡服務blance等。如果我 們不採用重量級應用服務器(如weblogic,websphere,jboss等)及重量級組件(EJB),我們必須自己實現其中一些服務。雖然我們大 多情況下,不需要所有這些服務,但實現起來卻非易事。幸運的是我們有大量的開源實現代碼,但採用開源代碼卻常常是件不輕鬆的事。

隨着xml作為結構化信息傳輸和存儲地位日漸重要,一些xml文檔操作工具(DOM,Digester,SAX等)的使用愈發重要,而隨着 xml schema的java binding工具(jaxb,xmlbean等)工具的成熟,採用xml schema來設計xml文檔格式,然後採用java binding來生成java bean 會成為主要編程模式,而這又進一步使數據中心向xml轉移,使在中小數據量上,愈發傾向於以xquery為查詢語言的xml數據庫。最近還有一個趨勢, microsoft,ibm等紛紛大量開發中間軟件如(microsoft office之infopath),可以直接從xml schema 生成 錄入頁面等非常實用的功能。還有web service 的廣泛應用,都將對軟件的架構有非常重大的影響。至於面向服務架構(SOA)前景如何,三層次架構什麼時候走入歷史,現在還很難定論。

aop的發展也會對軟件架構有很深的影響,但在面向對象架構里,無論aspectJ還是jboss-aop抑是aspectWerks、 nanning都有其自身的嚴重問題:維護性很差,所以說它將很難走遠。也許作為一個很好的思想,它將在web service里大展身手。

rdf,owl作為w3c語義模型的標誌性的語言,也很難想象能在當前業務架構發揮太大影響。但如果真如它所聲稱那樣,廣泛地改變着信息的結構。那麼對軟件架構也會有深遠影響。

有關架構設計的一些忠告:

盡量建立完整的持久對象層.可獲得高回報

盡量將各功能分層,分塊,每一模塊均依賴假定的其它模塊的外觀

不能依賴靜態數據來實現IOC模式,應該依賴數據特徵接口,靜態數據僅是數據特徵接口實現方式之一

架構設計時xml是支持而不是依賴.但可以提供單一的xml版本的實現

從業務角度說:軟件架構應是深刻體現業務內部規則的業務架構,但因為業務變化頻紝,所以軟件架構很難保持恆定不變,但業務的頻繁變化不應是軟件架構大規模頻繁變化的原因,軟件架構應是基於變化的架構。

一種業務有其在一段時間內穩定存在的理由(暫且不談),業務內部有許多用例,每一種用例都有固定的規則,每一規則都有一些可供判定的項,每一項 從某一維度來觀察都是可測量的,我們的架構首先必須保證完美適應每一項每一種測量方式,很多失敗的架構都是因為很多項的測量方式都發生變更這種微觀變化 中。

每個用例都有規則,我們在作業務用例分析,常常假定一些規則是先驗的,持久穩定的,然而後來的業務改變常常又證明這種看法是錯誤的,然而常常我 們的架構已經為之付出了不可挽回的代價。大量事實證明:規則的變化常常用例變化的根本原因。所以我們的架構要儘可能適應規則的變化,儘可能建立規則模版。

每個用例都關係著不同的角色。每一個用例的產生都必然是因為角色的變更(注意:不是替換,而是增強或減弱),所以注意角色的各種可能情況,對架構的設計有舉足輕重的意義。在我們當前的三層架構里,角色完美地對應接口概念。

在一個系統里很多用例都相互關聯,考慮到每個用例均有可能有不同的特例,所以在架構設計中,盡量採用依賴倒置原則。如架構許可可採用消息通信模式(JMS)。這樣可降低耦合度。

現在我們談一下業務穩定存在理由對業務的影響。存在即是合理,在這裡當然是正確的。業務因人而存在,所以問業務存在的理由即是問不同角色的需要這項業務的理由以及喜歡不喜歡當前業務用例的理由,所有這樣的角色都應該在系統里預留。

在架構設計中有幾個原則可以考慮:

用例盡量細分

用例盡量抽象

角色盡量獨立

項測量獨立原則

追求簡單性

這裡未提供相關的例子,例子會在以後的更新時提供。

業務和模式之間的關係

業務中的一些用例之間的關係常常和一些常規的模式很相似。但隨着時間的演化,慢慢地和先前的模式有了分歧。這是個正常的現象。但這對系統架構卻要求非常高,要求系統架構能適應一些模式的更替。在這裡我們儘可能早地注意到用例之間的相互角色變化,為架構更新做好準備.

Java網上商城系統的Java簡介

java語言相對於成本較低的PHP語言,存在較大的優勢,java語言的二次開發更為便捷,拓展性更強,經過對java語言源碼的二次開發,系統源碼的易用性和實用性方面會有很大的改善。同時,使用java語言開發的商城系統具有更安全、高效、強大的特點。

一、java商城系統架構的高效性

電商網站開發架構是一個商城系統的骨架,不同的語言有不同的架構建立方式。java使用面向對象的設計方法,java開源商城系統運用MVC模式設計,實現多層的網絡架構,使系統具有更加高效、合理的系統架構。java語言應用在商城系統中也會使系統在可拓展性、需求應變性上有更加強大。java商城系統遠不止於運用在建設PC端的商城網站,同時還可以應用在移動端,編譯成java手機商城系統。除了單用戶商城系統外,java程序設計語言還能運用在多用戶商城系統上,可以應用在不同行業的不同應用場景。

二、java商城系統的安全性

網上商城的安全性是用戶最為關注的,電商網站系統商城開發的安全性問題應該放在首位。Java系統在安全性方面有絕大的優勢,其他語言的開源特點導致其安全性沒有java系統那麼高,程序員在拿到其他語言源代碼後,可以較容易的進行修改,java程序代碼是一些編譯好的類,在安全性更值得信賴。在java商城系統不提供源代碼或源代碼注釋的情況下,普通程序員可能需要幾年時間才能破解java系統源代碼。所以在預算充足的情況下,java商城系統是大中型企業的首選。

三、開源商城系統數據庫的通用性

數據庫是一個網上商城系統不可缺少的部分。其他語言可編譯成具有與許多數據庫相連接的函數,可以編寫外圍函數對數據庫進行存取,但提供的數據庫接口支持彼此不統一,所以其他商城系統數據庫訪問代碼的通用性不強。但java是通過JDBC來訪問數據庫的,訪問數據庫接口比較統一,可以訪問不同數據庫廠商提供的數據庫驅動。在進行數據遷移時,java商城系統就具有很大的優勢。

四、java開源商城系統的價格

Java電子商務網站製作費用方面,所需要的費用是比其他要高出很多,體現在java技術員薪資、服務器購買、以及一些維護費用。java商城系統建設比較適合一些中大型的企業使用,便於中大型企業以後對商城系統進行二次開發。

採用java開發大型網站或B/S架構的企業管理軟件用什麼框架合適?各種框架的優缺點是什麼?

Struts + Spring + Hibernate 這是當前非常主流的開發模式。 其中的Struts框架是負責參數的接收(也包括業務邏輯的判斷)和頁面的跳轉、Hibernate框架是數據持久化的重要組成部分(就是主要和數據庫打交道的)也有的企業和個人會自己手動編寫底層的數據庫相關代碼。Spring框架是一定要用的,它省去了程序員很多的在編寫程序時對於事務和新建對象等方面的麻煩、使得程序員可以把主要精力放在程序的邏輯性和完整性方面。另外、Spring也會很好的整合Struts和Hibernate框架。領悟透了AOP的概念對於後期的編程益處頗大。 以上是本人的理解、純屬原著、謝絕轉載。希望能幫到你!

原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/280585.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
小藍的頭像小藍
上一篇 2024-12-21 13:04
下一篇 2024-12-21 13:04

相關推薦

  • Deepin系統分區設置教程

    本教程將會詳細介紹Deepin系統如何進行分區設置,分享多種方式讓您了解如何規劃您的硬盤。 一、分區的基本知識 在進行Deepin系統分區設置之前,我們需要了解一些基本分區概念。 …

    編程 2025-04-29
  • 如何在樹莓派上安裝Windows 7系統?

    隨着樹莓派的普及,許多用戶想在樹莓派上安裝Windows 7操作系統。 一、準備工作 在開始之前,需要準備以下材料: 1.樹莓派4B一台; 2.一張8GB以上的SD卡; 3.下載並…

    編程 2025-04-29
  • Java任務下發回滾系統的設計與實現

    本文將介紹一個Java任務下發回滾系統的設計與實現。該系統可以用於執行複雜的任務,包括可回滾的任務,及時恢復任務失敗前的狀態。系統使用Java語言進行開發,可以支持多種類型的任務。…

    編程 2025-04-29
  • 分銷系統開發搭建

    本文主要介紹如何搭建一套完整的分銷系統,從需求分析、技術選型、開發、部署等方面進行說明。 一、需求分析 在進行分銷系統的開發之前,我們首先需要對系統進行需求分析。一般來說,分銷系統…

    編程 2025-04-29
  • pythoncs架構網盤client用法介紹

    PythonCS是一種使用Python編寫的分布式計算中間件。它具有分布式存儲、負載均衡、任務分發等功能。pythoncs架構網盤client是PythonCS框架下的一個程序,主…

    編程 2025-04-28
  • 雲盤開源系統哪個好?

    本文將會介紹幾種目前主流的雲盤開源系統,從不同方面對它們做出分析比較,以此來確定哪個雲盤開源系統是最適合您的。 一、Seafile Seafile是一款非常出色的雲盤開源系統,它的…

    編程 2025-04-28
  • EulerOS V2R7:企業級開發首選系統

    本文將從多個方面為您介紹EulerOS V2R7,包括系統簡介、安全性、易用性、靈活性和應用場景等。 一、系統簡介 EulerOS V2R7是一個華為公司開發的企業級操作系統,該系…

    編程 2025-04-28
  • 基於Python點餐系統的實現

    在當前瞬息萬變的社會,餐飲行業也在加速發展,如何更好地為客戶提供更加便捷、高效、個性化的點餐服務,成為每個餐飲企業需要思考的問題。本文以基於Python的點餐系統為例,通過優化用戶…

    編程 2025-04-28
  • Ubuntu系統激活Python環境

    本文將從以下幾個方面詳細介紹在Ubuntu系統中如何激活Python環境: 一、安裝Python 在Ubuntu系統中默認已經預裝了Python解釋器,可以通過以下命令來檢查: $…

    編程 2025-04-28
  • 如何在Windows系統下載和使用cygwin?

    如果你是一名Windows系統的開發者,你可能會遇到一個問題,那就是缺少Unix/Linux系統下常用的命令行工具,這時候,你可以使用cygwin來解決這個問題。 一、cygwin…

    編程 2025-04-27

發表回復

登錄後才能評論