您現在的位置是:電腦技術吧?>? 基礎知識 ??>??客戶端編程,猿編程客戶端??>??正文詳情

客戶端編程,猿編程客戶端

褚小雨2019-12-11 16:22:44 人圍觀
簡介手機編程本文主要針對MVC框架的一些相關使用問題,介紹了JavaScript客戶端應用程序編程的一些建議。作為參考,您可能會注意到,最近一段時間,越來越多的web應用程編程網站

這篇文章主要介紹了對JavaScript客戶端應用編程的一些建議,主要針對MVC框架框架的一些相關使用問題,需要的朋友可以參考下  你可能注意到了,最近的一段時間越來越多的Web應用有變復雜的趨勢,重心從服務端慢慢向著客戶端轉移。

這是個正常的趨勢么?我不知道。

支持和反對者的討論就像是在討論復活者和圣誕節哪一個更好一樣; 很難說哪一方觀點就是完全正確的。

因此,本文不會探討究竟哪一方是對的,不過我還是試圖解釋一下使用大家所熟知的面向對象編程也許可以成功的解決客戶端編程中存在的一些問題。

  不太規范的代碼的示例  為了顧及一個應用的響應以及用戶體驗, 導致我們創建了持續增長的復雜的代碼, 這些代碼變得難于理解和維護。

你可以輕松的想到在沒有任何構架和遵循規則構建出客戶端的JavaScript應用代碼將會這樣:  ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 $(function(){ $('#form').submit(function(e) { e.preventDefault(); $.ajax({ url: '/animals', type: 'POST', dataType: 'json', data: { text: $('#new-animal').find('textarea').val() }, success: function(data) { $('#animals').append('li' data.text '/li'); $('#new-animal').find('textarea').val(''); } }); }); });   維護這一類的代碼將會很難。

因為這短短的一段代碼與很多地方都有關聯: 它控制著很多的事件 (站點, 用戶, 網絡事件), 它要處理用戶的操作事件, 要解析服務器返回的應答并且產生HTML代碼。

有人可能說: 是的,你說的對, 但是如果這不是一個客戶端單頁的頁面應用?這最多算是一次過度使用jQuery類庫的例子 不是很有說服力的觀點, 因為眾所周知,易于維護和精心設計的代碼是非常重要的。

特別是許多的工具或者是框架致力于保持代碼可用以便于我們能更簡單的去測試、維護、重用、和擴展它。

  MVC是什么?  談到這里。

我們能受益于那些基于MVC的JavaScript框架,但這些框架大部分不使用MVC,并且相當于Model和Videw的一種結合,或者在二都之間的一些東西,這很難去分清。

這就是為什么說大部分的Javascript框架是基于MV*。

  改變方法或許可以提供項目中客戶端的組織和架構,這使得代碼可以在很長的一段時間內容易維護,即使重構已經有的代碼也變得相對容易。

知道他如何工作和下面一些問題的答案是必需要要記住的。

  我的應用里有哪些類型的數據?-Model  用戶應該看到什么?-View  誰是和用戶交互的程序?-Controller  使用MVC框架重構代碼  受用MVC重構代碼有什么好處?  解除DOM和Ajax的依賴  代碼有更好的結構,并且更容易測試。

  從 $(document).ready()中刪除多余的代碼,只留下使用Model創建Links的部分。

  讓我們使用一些簡單步驟來重構一個典型的代碼塊  步驟 1: 創建視圖并移動Ajax請求  我們開始解除DOM和Ajax的依賴. 使用prototypes建造者,模式創建'Animals' 對象,并且添加一個 'add' 方法.同時創建視圖 'NewAnimalView' , 并且添加方法'addAnimal'、 'appendAnimal' 、'clearInput'.  代碼如下:  ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 var Animals = function() { }; Animals.prototype.add = function (options) { $.ajax({ url: '/animals', type: 'POST', dataType: 'json', data: { text: options.text }, success: options.success }); }; var NewAnimalView = function (options) { this.animals = options.animals; var add = $.proxy(this.addAnimal, this); $('# form').submit(add); }; NewAnimalView.prototype.addAnimal = function(e) { e.preventDefault(); var self = this; this.animals.add({ text: $('#new-animal textarea').val(), success: function(data) { self.appendAnimal (data.text); self.clearInput(); } }); }; NewAnimalView.prototype.appendAnimal = function(text) { $('#animals ul').append('li' data.text '/li'); }; NewAnimalView.prototype.clearInput = function() { $('#new-animal textarea').val(''); }; $(document).ready(function() { var animals = new Animals(); new NewAnimalView({ animals: animals }); });   步驟 2: 使用事件解除依賴.  這個例子,利用MVC框架是關鍵。

我們將會用到事件機制, 事件使我們結合和觸發自定義事件. 因此,我們創建新的AnimalsView和NewAnimalView,并且賦予它們不同的顯示animals的職責。

使用事件就來區別職責非常簡單。

如果在方法和事件之間傳遞職責,如下所示:  ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 var events = _.clone(Backbone.Events); var Animals = function() { }; Animals.prototype.add = function(text) { $.ajax({ url: '/animals', type: 'POST', dataType: 'json', data: { text: text }, success: function(data) { events.trigger('animal:add', data.text); } }); }; var NewAnimalView = function(options) { this.animals = options.animals; events.on('animal:add', this.clearAnimal, this); var add = $.proxy(this.addAnimal, this); $('# form').submit(add); }; NewAnimalView.prototype.addAnimal = function(e) { e.preventDefault(); this.animals.add($('#new-animal textarea').val()); }; NewAnimalView.prototype.clearInput = function() { $('#new-animal textarea').val(''); }; var AnimalsView = function() { events.on('animal:add', this.appendAnimal, this); }; AnimalsView.prototype.appendAnimal = function(text) { $('#animals ul').append('li' data.text '/li'); }; $(document).ready(function() { var animals = new Animals(); new NewAnimalView({ animals: animals }); new AnimalsView(); });   步驟 3: 傳遞數據結構到核心框架  最后,最重要的一步,我們使用: models, views and collections.  ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 var Animal = Backbone.Model.extend({ url: '/animals' }); var Animals = Backbone.Collection.extend({ model: Animal }); var AnimalsView = Backbone.View.extend({ initialize: function() { this.collection.on('add', this.appendAnimal, this); }, appendAnimal: function(animal) { this.$('ul').append('li' animal.escape('text') '/li'); } }); var NewAnimalView = Backbone.View.extend({ events: { 'submit form': 'addAnimal' }, initialize: function() { this.collection.on('add', this.clearInput, this); }, addAnimal: function(e) { e.preventDefault(); this.collection.create({ text: this.$('textarea').val() }); }, clearInput: function() { this.$('textarea').val(''); } }); $(document).ready(function() { var animals = new Animals(); new NewAnimalView({ el: $('#new-animal'), collection: animals }); new AnimalsView({ el: $('#animals'), collection: animals }); });   總結  我們已經實現什么呢?我們在高度的抽象上工作。

代碼的維護、重構和擴展變得更容易。

我們極大的優化了代碼結果,是不是很迷人?太棒了。

但是,我可能要給你潑冷水,即使最好的框架,開發的代碼仍舊是脆弱并且難以維護。

因此,如果你認為使用了一個較好的MV*框架能解決所有代碼上的問題是錯誤的。

記住在重構過程中,經歷了第二步,代碼會變得好很多,我們不使用框架的主要組件。

  記住MV*框架是好的這一點,但是所有關注在How'去開發一個應用,這讓程序開發人員頭決定What'。

每個框架的一個補充,尤其是當項目的Domain很復雜,將是Domain驅動設計方法,這將更關注與下面的方面:what, 把需求轉化為真正的產品的一個過程。

但是,這是我們要討論的另外一個主題。

版權聲明:本文由 褚小雨 整理編輯。

原標題:猿編程客戶端下載安裝,下載編程軟件

轉載注明出處:http://www.dn9ww09s.icu/basics/15335.html

文章評論

    共有條評論來說兩句吧...

    用戶名:

    驗證碼:

作者推薦

  • SQL 存儲過程,SQL查看存儲過程

    SQL 存儲過程,SQL查看存儲過程 相關圖片sql建立存儲過程SQL Server中alter過程和create過程的區別:1。AutoPro期望找到現有的存儲過程,而CREATE不是。2。Alter proc保持sql 調用存儲過程...

  • 怎么設置防火墻,防火墻設置在哪

    怎么設置防火墻,防火墻設置在哪 相關圖片系統防火墻在哪里設置甲骨文和防火墻設置訪問windows甲骨文數據庫后的防火墻,僅僅打開固定的TCP端口方式是不夠的。這個問題的根本原因是windows-Oracle數據庫的BT設關閉防火墻...

  • 標識列的使用,標識列是什么

    標識列的使用,標識列是什么 相關圖片無法更新標識列現在讓我們看一個表:考慮一下如何在數據庫SQL Server中輕松地向該表添加數據?很容易發現,在ID字段中添加這一列數據是規則的,并且可以遵循。這是一個等比自一個...

  • oracle10gclient,Oracle10g

    oracle10gclient,Oracle10g 相關圖片oracle10g安裝包Oracle 10g RAC[恢復OCR]-查詢OCR狀態:×/Oracle/product/10g/CRS/bin/ocrcheck prot-601:初始化查看oracle10g版本...

  • sqlget注入入門,sql注入攻擊教程

    sqlget注入入門,sql注入攻擊教程 相關圖片websql注入攻擊什么是sqlmap?Sqlmap是一個免費的開源工具,用于檢測和利用SQL注入漏洞。它具有很好的特性,即自動處理檢測和利用(數據庫指紋、訪問底層文件系統、命令執sql注入步驟...

  • oracleocr作用,oracle刪庫命令

    oracleocr作用,oracle刪庫命令 相關圖片oracle自動備份今天是2014年4月1日。我忙了一整天終于有時間寫點東西了。前一段時間,我寫了如何在RAC中有備份時恢復OCR。今天,我寫了如何在沒有備份的情況下重建OCR和Ooracle備份命令...

  • angular8,angular 2

    angular8,angular 2 相關圖片angular框架本文主要介紹了angularjs工具angular smart,它可以自動完成用戶界面,包括使用隔離作用域綁定指令和承諾。為了供您參考,我們最近在論壇中添加了一angular能做什么...

  • 水晶報表 指定數據庫,找不到指定的數據庫

    水晶報表 指定數據庫,找不到指定的數據庫 相關圖片選擇數據庫命令Oracle數據庫如何收集指定SQL的執行計劃和解決過程中的ora-00904錯誤(版權聲明,如果需要轉載原文或翻譯的文章,如果轉載的文章用于個人學習,請注明來查找數據庫的...

  • 表空間管理,表空間的管理方式

    表空間管理,表空間的管理方式 相關圖片oracle表空間使用2。Oracle磁盤管理中最高的邏輯層是表空間。必須在Oracle11g中創建的四個表空間是system、sysaux、temp和undotbs1。2系統:存儲oracle表空間概念...

  • 簡單框架,框架怎么畫

    簡單框架,框架怎么畫 相關圖片框架是什么本文主要介紹一個簡單的JavaScript類框架,有助于初學者理解JS類的創建和繼承。對于那些需要幫助的人,請參閱work in progress JavaSc網頁框架...

熱評文章

  • 數據庫存取方法,數據庫的最小存取單位

    數據庫存取方法,數據庫的最小存取單位 相關圖片數據庫中存儲的是什么一、實現思路:當用戶添加或修改圖片時,控制CommonDialog的showopen對話框,將通用對話框的文件名記錄到變量a中,然后使用app.path查找特定文件系統中最小的數據存...

  • 技能競賽小結,培訓小結

    技能競賽小結,培訓小結 相關圖片轉正個人小結本文主要介紹Android開發中一些耗時的操作總結。根據實際開發經驗,總結出六種耗時的編程操作。請注意,您可以參考在Android軟件開發過程中經常遇到的耗時操實訓總結...

  • 如何新建文件夾并保存,新建文件夾怎么建

    如何新建文件夾并保存,新建文件夾怎么建 相關圖片怎么新建文件夾放照片現在我們差不多完成了,讓我們保存新的查詢。在主菜單上,單擊“文件”菜單中的“保存”命令。如果此查詢是第一次存儲的,屏幕上將彈出一個對話框,詢問...

  • 您未被授權查看該網頁,微信取消網頁登錄授權

    您未被授權查看該網頁,微信取消網頁登錄授權 相關圖片微信不能登錄網頁版怎么解決Android授權訪問該網頁。使用WebView顯示由OAuth version 2.apimplicitgrant授權的頁面。不建議對移動終端使用授權碼授權:qq授權管理中心網頁...

  • 桌面應用程序開發,應用程序是什么

    桌面應用程序開發,應用程序是什么 相關圖片如何開發程序顧名思義,所謂手機程序就是可以安裝在手機上的程序,以改進原有系統的缺點和個性化。隨著科學技術的發展,手機的功能越來越強大。它不像以前那么簡單和僵硬,但...

  • 多線程有什么用,多線程

    多線程有什么用,多線程 相關圖片多線程死鎖進程和線程一般來說,Android會打開一個進程供應用程序執行。應用程序中的所有組件都通過單獨的線程執行,并且所有線程共享應用程序進程的資源。當應用程序啟動時,多...

  • exit,exit 0

    exit,exit 0 相關圖片King exit首先,一項活動有一個生命周期。一次創建,一次啟動,一次恢復,一次暫停,一次停止,一次存儲。。。Finish是活動的類,僅用于活動。調用finish()時,僅brexit...

  • 添加數據,數據庫怎么添加數據

    添加數據,數據庫怎么添加數據 相關圖片添加首先,我們在表中輸入幾個數字。當我們在空表中輸入數據時,只能輸入第一行。首先,將鼠標移到表上的“公司名稱”字段和第一行相交處的正方形。單擊鼠標左鍵,方塊中會出...

  • net好還是JAVA好,網站開發用JAVA還是net

    net好還是JAVA好,網站開發用JAVA還是net 相關圖片JAVA序列化和反序列化我們現在的大部分理解。Net可以總結如下:首先,它是Java平臺的一個克隆(注意這個平臺,不要把它和Java語言混淆)。后來,它逐漸演變,并有自己的特點。因為...

  • 倒計時效果,倒計時

    倒計時效果,倒計時 相關圖片倒計時網頁1. Import java.util.timer; import java.util.timertask; import android.annotation倒計時網...

關注微信

变脸官网查询