2010-06-03 100 views
155

有人能解釋一下我的軟件框架是什麼嗎?爲什麼我們需要一個框架?框架如何使編程更容易?什麼是軟件框架?

+5

@Bakkal,什麼意義上的你評論...它與框架無關 – OlimilOops 2010-06-03 08:25:55

+8

@Oops:使用MVC框架阻止我通過從視圖中的表示中分離控制器中的邏輯來製作* spaghetti *代碼。而且我不需要推出URL匹配和路由等功能以及* scratch *中的其他常用功能。這就是我的兩個關鍵字評論與框架的關係。 – bakkal 2010-06-03 08:40:25

+15

@Bakkal但你當然會同意,你的評論確實需要額外的解釋評論。由於我的問題你有機會評論你的評論 – OlimilOops 2010-06-03 09:07:18

回答

2

框架有一些你可能需要的功能。你可能需要某種具有內置排序機制的數組。或者,您可能需要一個窗口來放置一些控件,這些都可以在框架中找到。這是一種圍繞自己的工作跨越框架的工作。

編輯: OK我米左右挖什麼你們是想告訴我,)你也許還沒有注意到線之間的信息「圍繞跨越工作框架......」 此之前得到更深層次的下跌深入。我試着給地板以它希望你gracfully:
一個很好的解釋這個問題:「圖書館與框架之間的區別」我發現這裏
http://ifacethoughts.net/2007/06/04/difference-between-a-library-and-a-framework/

+0

完全不明白倒票...我完全驚呆了。問題是那種初學者的基本問題,我的回答是根據相當好... – OlimilOops 2010-06-03 08:11:27

+4

要清楚:我沒有投票。然而,你所談論的內容遠比框架所關心的要低得多。例如,集合和排序算法比框架更多是標準庫。 – bakkal 2010-06-03 08:16:28

+1

謝謝你的回答,但是......這不是我的問題的答案。根據OP的問題,在「標準庫」和「框架」之間進行切換是錯誤的地方。例如在.net框架中,您可以在框架的一部分中找到名稱空間集合,我從來沒有聽說過任何人說名稱空間集合不是.netframework的一部分。所以你對我的問題的回答是錯誤的 – OlimilOops 2010-06-03 08:35:37

40

The summary at Wikipedia (Software Framework)(第一款Google BTW命中)解釋了它相當好:

計算機編程中的軟件框架是一種抽象,其中提供通用功能的通用代碼可以被用戶代碼選擇性地覆蓋或專門化,以提供特定的功能。框架是軟件庫的一個特例,它們是可重複使用的抽象代碼,包含在定義良好的應用程序編程接口(API)中,但它們包含一些將它們與常規庫分開的關鍵區別特徵。

開發軟件框架,從圖書館或普通用戶的應用程序將它們分開,這些顯着特徵:

  1. 控制的反轉 - 在圖書館或普通用戶的應用程序在一個框架,不同的是,控制的總體方案的流程不是由調用者決定的,而是由框架決定的[1]。
  2. 默認行爲 - 框架具有默認行爲。這種默認行爲實際上必須是一些有用的行爲,而不是一系列禁止行爲。
  3. 可擴展性 - 用戶通常可以通過選擇性覆蓋或用戶代碼專門提供特定功能來擴展框架。
  4. 不可修改的框架代碼 - 框架代碼一般不允許修改。用戶可以擴展該框架,但不能修改其代碼。

你可能「需要」,因爲開發應用程序時,它可以爲你提供一個偉大的快捷方式,因爲它含有大量的已經編寫和測試功能。原因與我們使用軟件庫的原因非常相似。

+12

根據問題的類型,你答案的白色部分比灰色部分更好... – OlimilOops 2010-06-03 08:19:21

+0

我很確定詢問問題的人也發現了維基百科條目...他/她可能尋找更全面的答案。 – Stophface 2018-01-12 14:52:18

79

從技術上講,你不需要需要一個框架。如果你正在製作一個非常簡單的網站(想想1992年的網絡),那麼你可以用硬編碼的HTML和一些CSS來完成。

如果你想製作一個現代的webapp,你實際上不需要需要來爲它使用一個框架。

您可以選擇每次都寫自己需要的所有邏輯。 您可以編寫自己的數據持久性/存儲層,或者 - 如果您太忙 - 只需爲每個數據庫訪問編寫自定義SQL。 您可以編寫自己的認證和會話處理圖層。 和你自己的模板渲染邏輯。 和你自己的異常處理邏輯。 和你自己的安全功能。 和你自己的單元測試框架,以確保它一切正常。 和你自己的...... [繼續相當長的一段時間]

話又說回來,如果你使用框架,你就可以從良好的效益,一般同行審查如果不是幾百個其他開發人員,他們可能會比你更好,但是測試工作非常好。您可以快速構建自己想要的內容,而無需花費時間構建或擔心上面列出的基礎架構項目。

您可以在更短的時間內完成更多工作,並且知道您正在使用或擴展的框架代碼很可能比您自己做的更好。

而這個成本呢?投入一些時間學習框架。但是 - 幾乎所有的Web開發人員都會證明 - 使用任何你選擇的框架來學習獲得巨大(真正的,巨大的)好處是絕對值得的。

+13

爲什麼不把這種精力投入開源框架,而不是捆綁自己的東西呢? 「一個人,我們可以移動岩石;在一起我們可以移動山脈和所有那些 – 2012-05-17 15:21:26

+7

@Jefffrey「那麼你將如何學習?你將如何成長爲程序員?」瞭解你想要的,但如果你打算爲一個真正的客戶工作,你應該在最短的時間內提供最好的解決方案。你的「可能是越野車」的代碼是不可接受的。 – Cmorales 2013-09-13 16:37:34

+6

@Cmorales,如果你想學習編程語言或任何領域特定的問題,你肯定不會有任何「真正」的客戶端(你可能會有很多時間在你的手中),* *這是爲什麼我建議新手不要從框架開始。 – Shoe 2013-09-13 16:49:51

2

框架爲特定問題區域提供功能/解決方案。從wiki
定義:

軟件框架,在計算機編程 ,是 的抽象,其共同的代碼提供通用 功能可以選擇性 重寫或由用戶代碼 提供特定功能的專業。 框架是在該 軟件庫一種特殊情況下,它們是 的代碼可重複使用的抽象的定義良好的應用程序 程序編程接口(API)包裹 ,但它們 含有一些關鍵區別 功能,從 正常庫它們分開。

+0

第一句「抽象」中有一個詞。你是什​​麼意思 ?我們在哪裏使用抽象? – 2017-05-09 10:32:47

2

一個框架,可以幫助我們瞭解如何使用「已創建」,一個metaphore可以像,

認爲土料是編程語言,

和例如「相機」是程序,並且您決定創建一個筆記本。您不需要每次都重新創建相機,只需使用地球框架(例如到技術商店)拿起相機並將其集成到筆記本。

5

一個簡單的解釋是:框架是一個腳手架,你可以建立應用程序。

框架通常提供一些基礎功能,您可以使用和擴展它們來製作更復雜的應用程序,還有各種各樣的框架。微軟的MVC框架就是一個很好的例子。它提供了使用MVC模式離開地面建築網站所需的一切,它處理Web請求,路由等。你所要做的就是實現「控制器」並提供「視圖」,它是由MVC框架定義的兩個構造。 MVC框架然後處理調用您的控制器並呈現您的視圖。

也許不是最好的措辭,但我希望它能幫助

+0

實際上,它更像是將應用程序*構建成腳手架而不是圍繞它*。 – 2010-06-04 00:06:02

4

在最低水平,一個框架是一個環境,在這裏您將得到一套工具與

這個工具進來的形式工作配置文件等。

這個所謂的「環境」爲您提供基本設置(錯誤報告,日誌文件,語言設置等)......可以修改,擴展和構建。

人們實際上不需要框架,只是想節省時間,而其他人只是個人喜好的問題。

人們會用框架證明這一點,你不必從頭開始編寫代碼。但這些只是讓圖書館和框架混淆的人。

我沒有偏見,我現在實際上是在使用框架。

11

我不確定是否有明確的「框架」定義。有時候一大組庫被稱爲框架,但我認爲這個詞的典型用法更接近aioobe帶來的定義。

very nice article總結了只是一組庫和框架之間的區別:

一個框架可以被定義爲一組庫是說「不要給我們打電話,我們會打電話給你。「

框架如何幫助您?因爲不是從頭開始寫東西,而是基本上只是擴展一個給定的工作應用程序。您可以通過這種方式獲得大量的生產力 - 有時,由此產生的應用程序可能比您在同一時間內自己完成的應用程序要複雜得多 - 但您通常會以很大的靈活性進行交易。

24

已經有很多很好的答案,但讓我看看我能否給你另一個觀點。

簡化了很多事情,您可以將框架視爲除了實際功能以外的完整應用程序。你插入功能和PRESTO!你有一個應用程序。

考慮一下,比如一個GUI框架。該框架包含您製作應用程序所需的一切。事實上,通常可以通過幾乎不做任何事情的源代碼來創建最小程度的應用程序 - 但它確實爲您提供了窗口管理,子窗口管理,菜單,按鈕欄等。這就是框架的一部分。通過添加您的應用程序功能並將其「插入」到框架中的正確位置,您可以將這個空白的應用程序變成一個真正的完整應用程序,該應用程序只是進行窗口管理等操作。

還有類似的Web應用程序框架,用於服務器端應用程序等。在每種情況下,當您提供實際問題域功能時,框架都會提供大量冗長,重複的代碼(希望)。 (這是理想的,實際上,框架的成功當然是高度可變的。)

我再次強調這是一個框架的簡化視圖。雖然大多數框架都有內置的可怕概念,但我並沒有使用像「控制反轉」之類的可怕術語。既然你是一個初學者,我想我會把你的行話放在一邊,然後用簡單明瞭的方式去做。

2

除了定義之外,有時候只有在你已經理解的情況下才能理解定義,一個例子幫助了我。

我覺得在使用.Net排序列表時,我有一絲理解。框架的一個例子,它提供了一個由用戶代碼提供特定功能的定製功能。採取List.Sort(IComparer)。排序算法駐留在Sort方法的.Net框架中,需要進行一系列比較;對象A在對象B之前還是之後?但排序本身並不知道如何做比較;只有被排序的類型才知道這一點。您無法編寫可供許多用戶重複使用的比較排序算法,並且可以預測您將被調用的所有各種類型進行排序。你必須將這一點工作留給用戶本身。因此,在這裏,排序,也就是框架,調用回用戶代碼中的方法,類型被排序,以便它可以進行比較。 (或者可以使用代表;同一點)。

我是否明白這一點?

350

我很晚纔回答。但是,我想分享一個我今天只想到的例子。如果我告訴你要裁剪一張尺寸爲5米乘5米的紙,那麼你肯定會這樣做的。但是,假設我要求您裁切1000張尺寸相同的紙張。在這種情況下,您不會進行1000次測量;顯然,你會製造一個5米×5米的框架,然後在它的幫助下,你可以在較短的時間內裁剪1000張紙。所以,你所做的是制定一個框架來完成特定類型的任務。不是一次又一次地爲相同類型的應用程序執行相同類型的任務,而是創建一個框架,將所有這些工具組合在一個很好的數據包中,從而爲您的應用程序以及更重要的是許多應用程序提供抽象。

+23

我想知道投票答案的原因。它會幫助我改進它。 – 2014-02-04 05:38:47

+4

太棒了。太好:) – 2014-02-12 07:52:58

+3

酷很容易理解...........謝謝很多 – Premkumar 2014-03-09 04:32:11

2

一般來說,一個工作框架是打算作爲一個支撐或者導向爲建設一些東西,擴展結構分成有用的東西真實的或概念結構......