2011-02-13 87 views
7

Web框架非常棒。我認爲不考慮流行的開源庫是一種設計氣味。因此,如果有人開始使用Web項目而不使用像Rails這樣受歡迎的服務器端Web框架和像jQuery這樣的流行的客戶端框架,我會認爲他們要麼瘋狂,不知道,要麼非常小衆。你如何超越web框架來創建自己的應用程序框架?

也就是說,web框架不會爲你做很多事情。恕我直言,像Rails和jQuery這樣的框架已經成功了,因爲他們試圖把你帶到80%,剩下的20%讓你去做。做到80%可以讓他們足夠靈活,可以廣泛使用而不會過於緊縮或笨拙。所以問題就變成了,你對剩餘的20%做了什麼,尤其是隨着你的應用程序越來越大?

我們在過去的1.5年中開發和維護了一個Rails/jQuery-UI應用程序。如前所述,這些框架的不受限制的能力證明對於加快我們的速度,保持我們的生產力並加強良好的設計非常重要。然而,在過去的幾個月裏,我開始認爲我們應該能夠更快地開發和部署新功能,並且我開始覺得我們沒有足夠的基礎來構建Rails和jQuery提供的基礎知識我們。似乎每次都需要從80%的點開發新功能,而不是90%至95%。

爲什麼你的策略超越web框架?你用什麼技術或技術將80%的出發點移近90-95%?您遇到或克服構建自己的應用程序框架或工具包的具體障礙是什麼?在vanilla Rails和jQuery上開發的推動力是什麼,促使你尋求更緊密的應用程序集成?

回答

2

我對服務器端框架並沒有太多的瞭解,因爲我們的ASP.NET後端已經處理了90%的所有自定義服務器端控件,而其他人都已經用最後的5%編寫了交易。

在客戶端的術語中,除了編寫通用的可重用控件之外,幾乎沒有什麼可以做的。我使用jQuery的主要原因是因爲它抽象了跨瀏覽器的合規性。我像使用JavaScript一樣使用它,除非它在IE中毫不費力地工作。

在jQuery之上構建可重用的控件。製作自定義插件。使所寫的所有自定義代碼更加通用,以便從項目到項目再次使用它。我建議你看看backbone.js。這是一個客戶端MVC框架,可以讓您自定義您的Web應用程序。基於這樣一個MVC框架構建的代碼非常容易擴展並且非常易於管理。關於這一點的好處是你有很多控制權,你可以設置你自己的通用框架,允許重複使用,重新使用&。

要記住的重要事情之一是將跨瀏覽器合規性委託給像jQuery這樣的基礎庫,然後在其上構建抽象。

在我個人的經驗中,遍佈各處的通用不良代碼讓我們陷入了更多的困境,而不僅僅是jQuery的限制。也許如果每個人都編寫出色的代碼,我們會注意到jQuery的侷限性我看不到任何ASP.NET框架的限制。

+0

感謝您的回覆。閱讀這些迴應,可能並不完全清楚我正在考慮更加緊密的前端和後端集成,但是你會將它打到鼻子上。我們一直在使用[jQuery UI Widget抽象](http://bililite.com/blog/understanding-jquery-ui-widgets-a-tutorial/)來構建可重用的js小部件來構建可重用的前端小部件,但我們沒有沒有添加你在這裏討論的那種後端集成。我將把backbone.js添加到其他客戶端框架的列表中,以查看:knockout.js和jQueryMVC。 – jmaxyz

3

框架和圖書館讓您注意到「20%」,以便您可以在其上構建。如果你發現你還在工作,準系統,每當你需要增加一項新功能或功能時,在80%的水平上,那麼你什麼也沒做。

就我個人而言,我使用了許多PHP框架,在上面建立自定義庫和功能,幫助我的項目達到90-95%的水平。 15%的項目差異非常重要。這些代碼的一些例子是:效用函數,權限系統,內部apis和模板管理器(它們可以幫助用您的視圖呈現數據)。至於客戶端,Javascript,庫(jQuery,Prototype,Dojo等),這聽起來像你沒有想到的長期。越來越多的人意識到,在考慮使用哪個庫之前,他們需要從嚴格的JavaScript應用程序結構入手。庫提供了一些標準的方法來綁定事件,選擇元素等,但似乎沒有內建真正的大規模應用程序邏輯。您需要自己構建它。

鬆散耦合(或Pub/Sub - 發佈訂閱)已成爲很受歡迎,還有一些與MVC幫助和查看狀態像jQuery BBQBackbone.js(如@Raynos建議)的一些大圖書館。此邏輯可幫助您以應用程序標準化的方式擴展和正確管理新功能。也就是說,你應該仍然理解並開始於你理解的純粹無庫應用程序結構。我已經寫了一篇很好的文章關於此的文章(http://darcyclarke.me/development/javascript-applications-101/)和Addy Osmani也爲此提供了很好的資源(http://addyosmani.com/blog/large-scale-jquery/)。與服務器端有點不同,我建議你在決定使用哪個庫之前建立15-20%。畢竟,它們具有許多相同的功能,不應該僅僅依靠它來構建您的客戶端應用程序。

我仍然認爲你最好擁有這些工具,而不是從頭開始構建自己的工具,但我認爲你需要在他們之上構建自己的一套工具。

+0

我會爭辯說像'jQuery BBQ'這樣的視圖狀態管理確實屬於你的服務器端。 – Raynos

+0

取決於你正在建造什麼樣的應用程序。像SproutCore,jQuery BBQ和Backbone.js等所有處理視圖狀態的應用哈希URL(或'hashbangs')。隨着Twitter和Gawker採用這種hashbang方法,您將開始看到viewstate管理越來越多地被推送到客戶端。我建議讓viewstate的備份/服務器端版本可用於任何permalinking或SEO目的(在下一年,直到谷歌最終可以除外,渲染和索引基於JS的應用程序和hashbang) – darcy

+0

Javascript模板也有最近變得非常受歡迎,這也是採用更多客戶端管理和渲染視圖狀態的另一個原因。 Mustache.js(https://github.com/janl/mustache.js/)和官方的jQuery模板插件(http://api.jquery.com/category/plugins/templates/)只是其中的兩個已經發芽了。另外,誰不喜歡創建API來提供視圖狀態數據以供內部使用,客戶端或第三方使用 – darcy