架構和框架的區別

来源:http://www.cnblogs.com/ls99/archive/2017/08/31/7458171.html
-Advertisement-
Play Games

之前一直聽一些大牛談論什麼架構、框架,給我的直觀感覺就是一樣的,但是看瞭如下博文,我恍然大悟,原來是兩碼事。 人們對軟體架構存在非常多的誤解,其中一個最為普遍的誤解就是:將架構(Architecture)和框架(Framework)混為一談。其實很簡單,一句話:框架是軟體,架構不是軟體。框架落腳在“ ...


  之前一直聽一些大牛談論什麼架構、框架,給我的直觀感覺就是一樣的,但是看瞭如下博文,我恍然大悟,原來是兩碼事。

  人們對軟體架構存在非常多的誤解,其中一個最為普遍的誤解就是:將架構(Architecture)和框架(Framework)混為一談。其實很簡單,一句話:框架是軟體,架構不是軟體。框架落腳在“架”字上,可以理解成名詞性的,是一個客觀性的名詞存在,如.Net Framework;而架構體現在“構”字上,理解成構造,是一個動詞性的,是一系列動作發生的策略性體現。

       框架是一種特殊的軟體,它並不能提供完整無缺的解決方案,而是為你構建解決方案提供良好的基礎。框架是半成品。典型地,框架是系統或子系統的半成品;框架中的服務尅被最終應用系統直接調用,而框架中的擴展點是供應用開發人員定製的“可變化點”。

       架構不是軟體,而是關於軟體如何設計的重要策略。軟體架構決策設計到如何將軟體系統分解成不同的部分、各部分之間的靜態結構關係和動態交互關係等。經過完整的開發過程之後,這些架構決策將體現在最終開發出的軟體系統中;當然,引入軟體架構之後,整個開發過程變成了“分兩步走”,而架構決策往往會體現在框架之中。或許,人們常把架構和框架混為一談的原因就在於此吧!我們不能指著某些代碼,說這就是軟體架構,因為軟體架構是比具體代碼高一個抽象層次的概念。架構勢必被代碼所體現和遵循,但任何一段具體的代碼都代表不了架構。

       框架技術和架構技術的出現,都是為瞭解決軟體系統日益複雜所帶來的困難而採取“分而治之”思維的結果-----先大局後局部,就出現了架構;先通用後專用,就出現了框架。下圖很好地揭示了這一點。架構是問題的抽象解決方案,它關註大局而忽略細節;而框架是通用半成品,還必鬚根據具體需求進一步定製開發才能變成應用系統。

   

   簡而言之,框架和架構的關係可以總結為兩句話:(1)為了儘早驗證架構設計,或者處於支持產品線開發的目的,可以將關鍵的通用機制甚至整個架構以框架的方式進行實現;(2)業界(及公司內部)可能存在大量可供重用的框架,這些框架或者已經實現了軟體架構所需的重要架構機制,或者為未來系統的某個子系統提供了可擴展的半成品,所以最終的軟體架構可以藉助這些框架構造。

    原博文鏈接:http://blog.csdn.net/liuguobo/article/details/43451129


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • list是一種有序的集合,可以隨時添加和刪除其中的元素。 知識點: . 創: 增: list是一個可變的有序表,所以,可以往list中追加元素到末尾: 也可以把元素插入到指定的位置,比如索引號為1的位置: 刪: 要刪除list末尾的元素,用pop()方法: 要刪除指定位置的元素,用pop(i)方法, ...
  • re模塊包含對 正則表達式。本章會對re模塊主要特征和正則表達式進行介紹。 什麼是正則表達式 正則表達式是可以匹配文本片段的模式。最簡單的正則表達式就是普通字元串,可以匹配其自身。換包話說,正則表達式’python’ 可以匹配字元串’python’ 。你可以用這種匹配行為搜索文本中的模式,並且用計算 ...
  • 註:本文轉載自趙學智@行勝於言《什麼是對象,為什麼要面向對象,怎麼才能面向對象?》 地址:http://www.cnblogs.com/seesea125/archive/2012/04/03/2431176.html 一、 面向對象,這個對象到底是什麼? 這個對象不是C#中的實例,C#中我們把一個 ...
  • 1.抽象的產品類 2.抽象的工廠類 3.客戶端的程式 至此,以上都是應用抽象工廠基本不變的代碼。接下來就是具體的實現類,也就是根據變化的需求給出變化的代碼 4.具體產品類 5.具體工廠類 6.應用 ...
  • 伺服器設置 1. 安裝64位JDK; 2. 設置Linux文件系統為Ext4 3.開啟2181,7771,7772防火牆埠 源碼編碼 1. 安裝Maven 2. 安裝OpenSesame 下載地址:https://github.com/alibaba/opensesame.git,將openses ...
  • 使用裝飾者模式,可以動態的給一個對象添加一些額外的職責。這適用於,我們只希望給某個對象而不是整個類添加一些功能的場景。通過使用含有某個特定功能的類來“包裹”原始的類,提供給原始的類某些它本身不具備的特性。比如,我們有一杯“茉莉茶”,現在加上一顆“檸檬”,那我們就有了一杯“檸檬茉莉花茶”。“檸檬”作為... ...
  • 驗幻空越重,命循頻異長。依輪線日簡,接偶正分壯。言歡空月蟲,明勛品宜昌。依倫先日賤,潔偶正粉妝。 ...
  • 線程池中緩存線程的集合就是個單例 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...