2010-05-07 203 views
16

我知道這個問題之前已經被問過了,我讀了所有的答案,但他們仍然沒有給我我正在尋找的答案。我需要具體的東西。我自願向我們小組中的其他開發人員介紹MVC,這迫使我學習它。每個人都面臨的一個大問題是:「MVC爲我們提供的asp.net或MVC無法實現的功能可以做得更快,我剛剛參加了Nerd Dinner,並創建了一個完整的網站,可以模仿Nerd Dinner 。但是Scott Guthrie做了很多工作,但是有很大的差距沒有得到回答,比如我如何在列表頁面上用按鈕拋出一個文本框並做一個簡單的搜索。在asp.net中,我會拋出一個文本框,按鈕和網格在頁面上,並將其綁定到一個存儲過程,我走了,什麼是MVC的等價物,我想我需要一個非常好的教程,如何使用MVC而不使用Linq-to-Sql。爲什麼MVC而不是好的舊的ASP.NET?仍然沒有理解爲什麼我應該走這條路?

我知道我有點咿咿呀呀關於這一點,但它是一個非常嚴重的問題,那似乎仍置之不理。

在一個側面說明, MVC的View頁面帶回了經典asp的惡夢,以及代碼隱藏在頁面後面的所有內聯代碼。是的,MVC的控制器和模型類是偉大的,但我仍然不喜歡HTML中的經典asp標籤。

幫我看看這裏,我真的很喜歡MVC的概念,並希望它成功,但我需要更多!

+1

在解釋了「爲什麼我應該走這條路?」有意還是無意的雙關語? – ggonsalv 2010-05-07 14:42:39

+0

http://stackoverflow.com/questions/30067/should-i-migrate-to-asp-net-mvc http://stackoverflow.com/questions/102558/biggest-advantage-to-using-asp-net- mvc-vs-web-forms和其他許多 – 2010-05-07 16:59:24

回答

28

如何使用按鈕在列表頁面上投擲文本框並執行簡單搜索。在asp.net,我會拋出一個文本框,按鈕和網格在頁面上,並將其綁定到一個存儲過程,遠離我去

這正是背後的「經典」 ASP.NET Web窗體又名最大的問題。

你不應該在頁面,按鈕和事件方面思考。

您應該瞭解網絡工作的基本知識。然後你就會明白,網絡以HTTP協議,命令GET,POST和其他方式說話。演示文稿是HTML,CSS和文檔對象模型,這是JavaScript進入的地方。事實上沒有頁面,url只是一個指向資源的指針,它不一定映射到服務器上的物理文件(.html或.aspx)。

MVC的View頁面帶來了經典asp的噩夢與所有內聯代碼,當代碼隱藏在頁面後面時,我們離開了。

我和WebForms一起來到MVC後,發現我非常喜歡內聯代碼。它使得視圖結構非常清晰,關於靜態標記(aspx)+在代碼隱藏中操作服務器控件的耦合無法說明。後者實際上是一場噩夢 - 您的代碼正在生成標記輸出,但您並未看到在哪裏以及如何。

什麼能MVC帶給我們不能在asp.net做或MVC可以做得更快

它消除了難看的狀態提取,其WebForms的給我們的表。你現在回到了它開始的地方。你現在擁有的是:

  • 選項將您的演示文稿部分(視圖)從應用程序邏輯中分離出來。在混雜在一起之前,代碼隱藏與數據庫交談,調用其他服務,修改標記。這是一團糟。這導致了很多嚴重的申請書面,但幾乎不能再維護。

  • 能夠自動測試您的應用程序邏輯。使用WebForms和代碼隱藏功能,您將如何調用特定的場景?你會使用像Selenium這樣的工具來模擬用戶活動。現在,當你的觀點只是一個被動表示層時,你就再也沒有這個問題了。您可以非常輕鬆地測試業務邏輯和模型輸出。有意見可以顯示結果。如果模型在特定場景中獲得了正確的數據,該視圖將正確顯示它。如果不是,那麼不是。期。無需測試視圖。

  • 控制您的標記。那就是如果你在乎。如果您是一位前Windows開發人員,他不會對HTML文檔的有效性,語義上的正確性和Web引擎的優化程度做出任何評論,那麼這對您來說是沒有用的。我的意思是,「頁面」有點顯示,用戶點擊在桌面應用程序中處理,還有什麼,對吧?但是如果你對所有這些事情都感興趣,那麼你會看最後的標記輸出,並且看到它很醜陋,有很多錯誤,你無法修復的限制。因爲它是如何顯示控件,按鈕,數據網格等。試圖修復它們將需要重寫這些控件的標記生成,這是一項繁重的任務。爲什麼不把它放下,手動做一切?

MVC從表中需要什麼?

服務器端處理「控制」「事件」,就像在Windows編程中一樣。如果你正在開發一個類似於桌面的Web媒體應用程序,比如那些典型的「商業」軟件,有幾十個和幾百個控件讓你發瘋,那麼MVC會讓你發瘋,因爲你必須單獨連接每個控件JavaScript的。但如果你沒有開發那些需要特定智能的應用程序,而是開發現代可用的網絡軟件,那麼WebForms會讓你瘋狂。遲早。

+0

非常好的答案,謝謝澄清。這有很大幫助。 – 2010-05-07 20:28:20

+0

如果你不能說服你的團隊採用MVC(我強烈建議),那麼我至少會說服他們在WebForms中利用MVP設計模式。我自己一直在使用MVC一段時間,而且我很難回到WebForms。期。 – Amir 2010-05-21 16:15:53

+0

@Amir:這裏一樣。必須在...工作......使用WebForms,我發現我的大腦不願意用這些術語思考。 – 2010-05-21 19:54:00

0

控制HTML輸出 - 是一回事。從搜索引擎優化的角度來看,所有那些奇特的控件都嚴重受損。

加上覆雜的表格,ASP.NET狀態模型是地獄,太;)

總之,一個例子是搜索框...它吮吸;)

我會用MVC這樣:

搜索是網址: /搜索/關鍵字 或 /搜索/關鍵字/ pagenr(如/搜索/編程/ 5

的好處是:我可以很容易地搜索結果互應爬行gle - 我知道的一些網站從類似的東西中獲得最多的點擊量。

難於編程比asp.net - 取決於你是否想要高效的HTML。 ASP.NET的控制模型不會導致精簡定義的HTML。

除此之外 - MVC是更多的可測試。單元測試一個經典的HTML網站是不可能的,MVC的解耦模型使得它更容易。

0

我不是來自微軟的背景,所以我可能會遺漏一些與ASP.NET嚴格相關的東西,但是MVC並不是ASP.NET的東西。 MVC或模型視圖控制器是軟件設計中的體系結構主體,並非嚴格適用於Web。圖形用戶界面應用程序通常使用此模型。

無論如何,你的問題是處理「爲什麼」。搜索列表頁面就是一個很好的例子。有了MVC,你可以使用模板來只有修改搜索的視覺方面(視圖)。您可以添加按鈕並格式化控制器給您的內容,而無需更改控制器本身。同樣,有了一個視圖,您可以更改視圖的「給定」的邏輯,而無需實際更改視圖。最後,您可以從關係數據庫轉到XML數據庫,而無需擔心更改程序的其他任何方面。邏輯分離得很乾淨,這種模式適合許多使用情況。

我強烈建議您看看Wikipedia article on MVC。使用圖形用戶界面(GUI)示例而不是簡單的基於Web的示例可能會更容易理解。

瑞安

+1

「但是MVC與ASP.NET不同」 - ASP.NET MVC與ASP.NET WebForms非常不同。後者將網絡媒體包裝成一種有狀態的抽象模式。 – 2010-05-07 11:28:29

+0

「但是MVC與ASP.NET沒有什麼不同」 - 確實它使用相同的底層平臺,但實際上它與WebForms有很大不同。正如開發者藝術所言,WebForms提供了一種抽象,簡化了Web開發,使其與控件概念和更多內容非常類似。 – Venemo 2010-05-07 11:34:13

+0

是的,缺少一點;) – UpTheCreek 2010-05-07 11:36:38

1

下面的文章,讓我開始用MVC

ASP.NET Web窗體不會 任何地方。儘管我喜歡ASP.NET MVC,但它並不是最終全部通過 適用於web 開發的萬能解決方案。這兩種方法 在web 開發人員的工具箱中都有其應有的地位,重要的是 以識別其優勢和 的弱點。一般來說,MVC框架傾向於易於使用(例如,視圖狀態, 驗證等),以使 開發人員能夠更加嚴格地控制排列。這可能是一件好事,但只有在你利用它的情況下才能使用 。否則它可能很容易成爲障礙。考慮到這一點,我開發了一個 快速指標來確定ASP.NET MVC是否適合您。我看到 的方式,開發人員應該通過ASP.NET web表單選擇ASP.NET MVC框架,這主要有三個原因。 如果沒有這些理由 引人注目給你,那麼你應該 堅持使用ASP.NET Web窗體:

單元測試這,在我看來,是 最有說服力的理由使用 ASP。 NET MVC。當涉及到單元 測試時,ASP.NET MVC只是簡單地將ASP.NET Web窗體吹出水面。 它甚至不接近。儘管ASP.NET表單要求您跳過各種各樣的環節來測試頁面事件生命週期,但ASP.NET MVC 框架實際上要求測試的結果爲 。有各種接口 到處尖叫「嘲笑我!」。

還有一個原因,最大的 ASP.NET MVC的支持者也往往是 TDD的支持者;這是因爲MVC實際上允許TDD使用ASP.NET 。 就我個人而言,我認爲這是所有的熱情來自於哪裏。簡單地說:這是 真的,很難做TDD與 ASP.NET web窗體,真的,真的 很容易在ASP.NET MVC中做到這一點。

增益控制和可擴展性作爲 在評論中指出,ASP.NET MVC 給你更多的控制權,比ASP.NET網頁 形式 可擴展性選項。您可以完全控制頁面請求生命週期和 替換框架的幾個關鍵 部分(例如,查看 引擎,路由等)的能力,其中任何一個 都可以用於ASP.NET Web表單。

除此之外,您還可以獲得 完全控制呈現的HTML。 一般來說,來自 的ASP.NET呈現的HTML表單應用程序是 殘暴。網頁控制它 利用生成垃圾ID和 隱藏字段嘉豪不僅 妨礙了網站的性能,但 也使CSS樣式和Javascript 發展的痛苦。 ASP.NET MVC 強制你更符合你的HTML的 。沒有任何中繼器 或神奇地爲您產生 標記的數據網格。隱藏字段 你沒有任何隱藏字段。這只是你,HTML,和一些擴展方法(你甚至不必使用 )。

要學點東西新換句話說,「因爲你覺得它」 「。這實際上是我爲什麼開始使用ASP.NET MVC的 。從另一個角度來看,你從未遇到過如何從 開始接近發展。

我還要指出的是,學習 ASP.NET MVC是令人難以置信的接合 過程,因爲ASP.NET MVC框架 隊一直在這個過程中這樣的互動 。我認爲ASP.NET MVC的吸引力很大一部分是 , 社區的輸入不僅被考慮到 ,而且還被 積極追捧。 框架引發了很多 討論和辯論最好的 做法,簡單地沿着 向您介紹您可能 以前沒有意識到的概念。 I 實際上會推薦學習 ASP.NET MVC框架因爲這個原因 單獨。 TDD,BDD,ORM上的線程, AJAX等您在 期間偶然發現的學習過程是值得的。

所以你有它。除了這三個 之外,我想不出任何 爲什麼開發人員會爲 學習ASP.NET MVC。也許這就是爲什麼 的採用率並不像我們認爲的那樣高。使用框架 的激勵實質上歸結爲單元 測試,控制/擴展性和 無聊/好奇心。很好的理由, 可以肯定,但幾乎沒有遊戲破解者 絕大多數開發者出 那裏。

9

我在過去幾天也在學習MVC。我的經驗是提供了一個簡單得多的網絡模型。

雖然WebForms承諾它將使Web開發非常接近Windows開發,並帶有複雜的事件模型,控件和所有內容。
爲什麼?因爲當時微軟的開發人員基本上都是VB和C++開發人員,他們在形式,控制方面都在思考,這爲他們開始爲Web開發提供了一個簡單的方法。

MVC提供了什麼更多的控制基礎協議和更多的控制你輸出的HTML。
另外,他們給你內置的ASP.NET路由,所以你的URL也會看起來更好。

舉例: StackOverflow是使用ASP.NET MVC構建的。

你舉的例子:

我怎麼扔 房源頁面上的文本框帶有一個按鈕,並做了簡單的 搜索。在asp.net中,我會 在 這個頁面上拋出一個文本框,按鈕和網格,並將它綁定到一個sproc和 我走。

您當前Controller爲它創建一個Action,扔在頁面上的表單與Html.BeginForm它指向動作(記住,用MVC,你可以在網頁多種形式),拋出一個文本框和一個提交按鈕。

然後,根據您的喜好,您可以爲搜索結果創建單獨的視圖,或重新使用現有的視圖。新動作的名稱可以與舊名稱相同,其中[HttpPost](如果您願意的話)可以是[HttpGet],因此該URL不會讓用戶感到困惑。然後你可以打電話給你的SPROC,你很好。
(這一切都可以在幾分鐘內完成)

我喜歡關於MVC的另一件事情是它基本上很容易創建CRUD操作。 (如NerdDinner。)
VS會生成視圖所需的80%代碼,然後您可以非常輕鬆地進行自定義。

我建議你閱讀整本書,而不僅僅是NerdDinner的免費插曲,它會給你一個關於該技術的非常好的照片。

+0

我感謝您的意見。他們非常有幫助。 – 2010-05-07 20:29:04

+1

謝謝!我很感激我可以提供幫助。 – Venemo 2010-05-08 14:56:21

0

MVC被認爲是替代老的asp.net,而不是下一步。如果你想爲你的頁面編寫單元測試,恕我直言,MVC具有明顯的優勢。

但我不同意MVC以性能,代碼質量或生產力的名義向經典的asp.net添加任何東西。您可以通過在不需要的時候關閉viewstate來達到與asp.net相同的性能,或者您可以通過使用輕量級服務器控件更多地控制HTML輸出。 (例如,代替DataGrid的中繼器)。

+0

「您可以更多地控制HTML輸出」 - 錯誤。你不能比完全控制更有把握。具有相同的表現;也許,擁有相同的控制權; WebForms不會發生。 – 2010-05-07 17:19:45

2

龐大的背後代碼是Webform最大的問題之一。 RAD方法可以更快地創建項目,但代碼背後龐大的代碼不可維護,可重複使用和可測試。 MVC解決WebForm有5個問題。

問題1: - 網絡表單是用於基於操作需求的查看基於溶液

問題2: - 後面代碼和查看

問題3之間的緊密耦合: - HTML不是在網絡表單唯一的反應類型這是不靈活

問題4: - 的視圖和數據不可能的web表單

問題5彈性組合: - 背後碼是不能被實例化的重笨重類。

所有上述各點有這個CodeProject上的文章http://www.codeproject.com/Articles/821275/Why-ASP-NET-MVC-ASP-NET-MVC-vs-ASP-NET-webforms

enter image description here

相關問題