Angularjs開發一些經驗總結

來源:互聯網
上載者:User

       在去年到今年參與了2個使用Angularjs作為用戶端開發架構的項目開發。主要利用asp.net web api作為restfull服務提供架構和angularjs結合。Angularjs作為html的擴充,旨在建立一個豐富的動態web應用,通過Directive建立一套html擴充的DSL模型,利用PM模式變形MVVM在網上很多稱MVC模式,本人認為在angular0.8是屬於經典MVC模式,但在1.0把scope獨立注入過後,更傾向於MVVM模式,這將會後續隨筆中寫道)簡化前端開發和使得前端商務邏輯得以分離,view和表現邏輯的分離,更便於維護,擴充。Angularjs本來就是採用TDD開發的,提供了一套單元測試組件和End 2 End的測試架構。Angularjs的的強大之處在於提供了一套內似WPF,Silverlight的強大資料繫結和格式化,過濾組件,這也是MVVM模式所必備的條件;再加之IOC的注入機制,使得不能商務邏輯的分離,服務代碼的更大程度抽象重用。

     在這節隨便中將討論的angularjs開發的一些基本準則,為什麼會有這篇隨便呢,因為看見一些項目對於angularjs的亂用。

  1:不要一個page一個God似無所不能的controller包含所有頁面邏輯。

        Angularjs ng-controller旨在將商務邏輯的區分,更推薦按照商務邏輯的劃分controller,做到業務功能的高內聚,controller的單一原則SRP。

  2:View中包含盡量少的邏輯。

       就像jsp,asp這類服務端模板引擎一樣,我們應該把盡量少的邏輯放在view中,因為這樣會導致view和邏輯的緊耦合性,view在軟體開發中是最易變化的,而表現層邏輯卻相對於view是相對穩定的行為。同時也導致的view中的邏輯不能被自動化測試,持續整合所覆蓋,這將導致以後修改重構和模組的整合的痛苦。很明顯的就是太多的angularjs的ng-switch,ng-when和頁面計算運算式等等。

3:注意一些特殊的節點式的angularjs directive,因為在IE7上這是不被認識的,因為IE的嚴格XML模式。如果你想make ie7 happy,

     1:請注意匯入json2或者json3的js

     2:xmlns:ng命令空間和節點element式directive。

<html xmlns:ng="http://angularjs.org">

<head>

<!--[if lte IE 8]>

<script>

document.createElement('ng-include');

document.createElement('ng-pluralize');

document.createElement('ng-view');

 

// Optionally these for CSS

document.createElement('ng:include');

document.createElement('ng:pluralize');

document.createElement('ng:view');

</script>

<![endif]-->

</head>

  4:在controller和service中絕對不能出現html的DOM和CSS代碼。

      這會導致邏輯的混雜耦合,對於angularjs自身的綁定對html操作,很多時候你會分不清是view的影響源,導致修複bug,和新增功能,重構的艱難,常常出現很多的詭異行為。最好的實踐模式則是把必須的dom,css操作移向angular的Directive,或者view中。在angularjs模式中只有directive和view才能出現dom和css的邏輯操作。

  5:controller中公用的邏輯推向servicefactory,value,config),採用IOC的注入,提高代碼的重用度,修改的單一點,開閉原則。

  6:controller應該只包含商務邏輯,對於資料模型的格式化過濾盡量交給angular架構filter等處理。

7:viewmodel中最好建立一個通用屬性比如vm,它承載view渲染的最小量化model,對於model的變形事件則在vm之外scope之上。這才是MVVM推薦方式。事件相當於WPF中的command,負責模型事件的傳遞修改模型,從而從模型的改變通知view的強制更新WPF中model必須實現INotifyPropertyChange介面)。同時這樣vm屬性也便於資料的填充和收集回傳服務端。

8:IOC注入優先,注有助於良好的設計,邏輯的可重用和單元的可測試性,物件導向的“開閉原則”,修改的單一點。

9:良好的分層設計,對於服view的互動採用controller通過viewmodescope)的推送,伺服器的互動推向service層次,利用angularjs的$resource或者$http擷取更新資料model,與服務端互動。層次屬於縱向分割,將一類功能邏輯的介面放在一起,架構層次,而model則從業務的邏輯橫向分離。

10:服務端的服務的介面需要考慮表現層用戶端的應用提供,這是一個良好的SOA服務設計的準則,這裡不用多餘的描述,具體請移步架構篇。

11:如果你的公司應用了敏捷開發則,TDD的開發是必備的,angularjs本也是解決javascript測試驅動開發項目。

 

   最後想說說angularjs也不是銀彈,並不是萬能的,不是所有的項目都適合應用,它適用於CRUD的應用系統,內建了一些預設規則慣例優先),對於表現層頻繁互動的項目不適用,對於一些特殊的項目比如spring hdiv的項目也不是那麼友好,或者就是你希望相容更多的IE8一下的版本的應用系統,同樣也不實用。

本文出自 “破狼” 部落格,請務必保留此出處http://whitewolfblog.blog.51cto.com/3973901/1161630

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.