亚洲免费av电影一区二区三区,日韩爱爱视频,51精品视频一区二区三区,91视频爱爱,日韩欧美在线播放视频,中文字幕少妇AV,亚洲电影中文字幕,久久久久亚洲av成人网址,久久综合视频网站,国产在线不卡免费播放

        ?

        服務(wù)器端WEB開(kāi)發(fā)新興技術(shù)的最佳實(shí)踐

        2013-11-09 11:52:46李太寧
        關(guān)鍵詞:開(kāi)發(fā)人員服務(wù)器端代碼

        葉 鈺,李太寧

        (1. 泰州職業(yè)技術(shù)學(xué)院 信息工程學(xué)院;

        2. 新生網(wǎng)絡(luò)科技有限公司,江蘇 泰州 225300)

        傳統(tǒng)意義上,WEB開(kāi)發(fā)中服務(wù)器端與客戶端是密不可分的。無(wú)論是基本的ASP、JSP、PHP技術(shù),還是稍上層一點(diǎn)的Struts、Spring、JSF、Seam等技術(shù),都將生成WEB頁(yè)面的代碼編寫包含在服務(wù)器端開(kāi)發(fā)過(guò)程中。從解耦與分層方面分析,需要服務(wù)器端代碼完全不考慮頁(yè)面顯示,但在實(shí)際開(kāi)發(fā)過(guò)程中,由于移動(dòng)WEB應(yīng)用的火爆,移動(dòng)終端的普及,目前終端種類的數(shù)量已經(jīng)無(wú)法讓項(xiàng)目在設(shè)計(jì)階段就考慮周全,所以在編寫服務(wù)器端代碼的時(shí)候完全隔離WEB界面有關(guān)代碼將成為所有WEB開(kāi)發(fā)人員必備的素質(zhì)之一[1]。

        下文將從技術(shù)選型與最佳實(shí)踐上探討解決服務(wù)器端WEB開(kāi)發(fā)的一些重點(diǎn)、難點(diǎn)和需要使用到的技術(shù)。

        1 開(kāi)發(fā)語(yǔ)言

        本文選擇Java這一最普遍的WEB開(kāi)發(fā)語(yǔ)言,對(duì)比種種新興的腳本語(yǔ)言,Java的功能并不強(qiáng)大,也因?yàn)榉N種限制(例如缺少閉包、不完全面向?qū)ο蟆⒄Z(yǔ)法不夠靈活等),使代碼量相對(duì)較大。但也正是因?yàn)檫@種限制,讓Java成為了團(tuán)隊(duì)開(kāi)發(fā)與大型項(xiàng)目的首選語(yǔ)言,長(zhǎng)期占據(jù)著開(kāi)發(fā)語(yǔ)言的前三名。Java語(yǔ)言即使沒(méi)有注釋,團(tuán)隊(duì)成員也能分辨基本的功能實(shí)現(xiàn)。同時(shí),使用Java語(yǔ)言開(kāi)發(fā)的人員較多,其學(xué)習(xí)成本與二次開(kāi)發(fā)成本相對(duì)為所有語(yǔ)言中最低的。這樣可提高項(xiàng)目的可持續(xù)性,大大降低項(xiàng)目的成本。其他開(kāi)發(fā)語(yǔ)言,如Ruby等新興語(yǔ)言由于太過(guò)靈活,同樣的功能,每個(gè)開(kāi)發(fā)人員寫出來(lái)的代碼都會(huì)有根本的變化,這雖然讓個(gè)人的開(kāi)發(fā)效率得到了提高,但卻大大降低了團(tuán)隊(duì)的開(kāi)發(fā)效率。所以Java語(yǔ)言可作為WEB服務(wù)器端開(kāi)發(fā)的最佳實(shí)踐語(yǔ)言。

        2 版本控制

        在軟件開(kāi)發(fā)過(guò)程中,調(diào)優(yōu)、調(diào)試、測(cè)試的時(shí)間占據(jù)了開(kāi)發(fā)流程的大部分時(shí)間,在這過(guò)程中,如果沒(méi)有對(duì)代碼進(jìn)行版本控制,那么一旦出現(xiàn)錯(cuò)誤,則很難對(duì)錯(cuò)誤進(jìn)行追溯。同時(shí)需求的變更、團(tuán)隊(duì)開(kāi)發(fā)、版本測(cè)試等許多情況都讓版本控制成為開(kāi)發(fā)過(guò)程中必不可少的工具之一。版本控制軟件的選擇很多,其中GIT版本控制系統(tǒng)[2],其穩(wěn)定性與適用性經(jīng)歷了大量的考驗(yàn),排名第一的市場(chǎng)占有率使其成為了當(dāng)之無(wú)愧首選版本控制工具。

        Git的主要優(yōu)勢(shì)在于其分布式的管理方式。由于采用了去中心化的版本管理思想,Git不用安裝服務(wù)器端,不同的客戶端都可以作為完整的服務(wù)器端進(jìn)行部署,各客戶端之間的傳輸方式?jīng)]有任何限制。同時(shí)Git的快速分支功能使得快速迭代開(kāi)發(fā)的成本可以忽略不計(jì),任何一個(gè)標(biāo)點(diǎn)的修改都可以作為新的分支或版本保存,并隨時(shí)回溯,大大增加了開(kāi)發(fā)效率。

        3 開(kāi)發(fā)部署

        部署與測(cè)試的效率是Java等編譯型語(yǔ)言的弱項(xiàng)。每次修改Java代碼后,想要看到運(yùn)行效果都必須經(jīng)歷重新編譯、部署、重啟web server等繁瑣的過(guò)程。即使這些過(guò)程完全自動(dòng)化運(yùn)行,最快也需要5~10秒的時(shí)間,這幾秒的時(shí)間常常會(huì)中斷開(kāi)發(fā)思路,造成開(kāi)發(fā)人員精力分散。如何實(shí)現(xiàn)快速開(kāi)發(fā)部署,以至于如何實(shí)現(xiàn)瞬時(shí)熱部署(hot deploy)就成為WEB開(kāi)發(fā)非常重要的一環(huán)。近兩年,隨著相關(guān)技術(shù)的成熟,已經(jīng)有四五種實(shí)現(xiàn)快速開(kāi)發(fā)部署的工具,不過(guò)技術(shù)原理都無(wú)非是修改Java的編譯過(guò)程,讓Java代碼的修改直接作用到Java字節(jié)碼生成階段。例如JBoss的Application Server 7.0以后版本使用的hot deploy方式。對(duì)于這方面,不同的工具適用性都有種種的限制,需要開(kāi)發(fā)人員在項(xiàng)目初期根據(jù)自己的需要來(lái)選擇。

        4 會(huì)話狀態(tài)

        本文主要探討的是服務(wù)器端的WEB開(kāi)發(fā),保持用戶狀態(tài)的細(xì)節(jié)問(wèn)題就全部交由客戶端去操作。大致的方向有cookie加密、Local Storage等。篇幅原因,這里不詳細(xì)闡述。

        5 實(shí)體關(guān)系映射與雙向數(shù)據(jù)綁定

        實(shí)體關(guān)系映射(ORM)是軟件開(kāi)發(fā)中重要的思想與手段,充分使用ORM后,軟件的結(jié)構(gòu)與開(kāi)發(fā)效率都會(huì)得到巨大的提升。得益于Hibernate,Java成為了ORM發(fā)揮優(yōu)勢(shì)的最佳環(huán)境。

        自1970年MVC模式被提出,如今已經(jīng)成為服務(wù)器端WEB開(kāi)發(fā)的標(biāo)準(zhǔn)模型[3]。但MVC模型(如圖1所示)并不能很好的適應(yīng)本文提出的思想。由于完全屏蔽了用戶界面的生成,所以與客戶端的交互需要全部使用對(duì)象來(lái)實(shí)現(xiàn)。

        如圖2所示,客戶端與服務(wù)器端交互的數(shù)據(jù)需要全部組織并處理成對(duì)象,而這些對(duì)象與Java程序中的Model是對(duì)應(yīng)的,從而實(shí)現(xiàn)了Controller在處理的時(shí)候只需要根據(jù)對(duì)象的屬性與狀態(tài)來(lái)進(jìn)行有關(guān)的業(yè)務(wù)處理,并由ORM持久化到數(shù)據(jù)庫(kù)中。服務(wù)器端與客戶端交互的對(duì)象全部由JSON Object來(lái)實(shí)現(xiàn)。

        6 模板生成與WebService

        所有接受客戶端請(qǐng)求的地址全部以web service的方式實(shí)現(xiàn)。每個(gè)web service請(qǐng)求均會(huì)產(chǎn)生兩條請(qǐng)求,一個(gè)請(qǐng)求返回具體的HTML頁(yè)面文件,另一個(gè)請(qǐng)求返回JSON Object。所有HTML頁(yè)面均使用靜態(tài)地址獲得,由web server來(lái)自動(dòng)處理,不再需要controller參與HTML頁(yè)面的處理過(guò)程,不同的controller只需要根據(jù)請(qǐng)求返回JSON Object,下面以考試系統(tǒng)的項(xiàng)目中用來(lái)處理Question對(duì)象的controller為例。具體代碼如下:

        public interface Controller{

        ……

        public Map objectsMap;

        ……

        protected void returnJSON(){}

        ……

        }

        其中objectsMap存儲(chǔ)所有需要返回的對(duì)象,returnJSON則將對(duì)象組織成需要的格式寫入HTTP Response中。在具體的實(shí)現(xiàn)中,需要有一個(gè)Class來(lái)實(shí)現(xiàn)這個(gè)接口,并處理通用的處理代碼,例如對(duì)objectsMap的存取,HTTP Response的生成等,同時(shí)加入一些通用的業(yè)務(wù)邏輯,例如異常的如理,數(shù)據(jù)的驗(yàn)證。然后由具體的controller來(lái)集成這個(gè)Class,實(shí)現(xiàn)具體的業(yè)務(wù)邏輯。例如以下代碼:

        public class QuestionAction extends Ctrl{

        ……

        public static void save(Question question){

        if(Common.isEmpty(question.id)){question.create();

        }else question.save();

        objectsMap.put("o",question);

        returnJSON();

        }

        ……

        }

        其中Ctrl為處理一些通用操作的Class。save方法為將客戶端傳來(lái)的question對(duì)象保存到數(shù)據(jù)庫(kù)中。在save方法接收到question對(duì)象以后,先做一些基本的驗(yàn)證,例如判斷是新建還是保存,如果是新建的請(qǐng)求,則傳來(lái)的question的id是空。保存到數(shù)據(jù)庫(kù)后,將保存完成的question對(duì)象返回到客戶端。

        7 結(jié)語(yǔ)

        從上面的例子可以看出,采用本文提到的各種技術(shù)后,服務(wù)器端的代碼變得異常清晰明了。無(wú)論是擁有多年經(jīng)驗(yàn)的資深開(kāi)發(fā)人員,還是剛接觸項(xiàng)目的新手都能輕松讀懂代碼,同時(shí)由于版本控制的充分使用,使得維護(hù)成本大大降低。服務(wù)器端WEB開(kāi)發(fā)效率因此得到巨大提升。本文提及的最佳實(shí)踐系筆者多年開(kāi)發(fā)經(jīng)驗(yàn)的總結(jié)和長(zhǎng)期觀察目前國(guó)外各大公司的WEB APP開(kāi)發(fā)趨勢(shì)所得,越來(lái)越多的新興應(yīng)用也已經(jīng)采用類似思想,例如Sony's PlayStation 3的YouTube應(yīng)用(http://us.playstation.com/youtube/)和在開(kāi)發(fā)人員中非常流行的Plunker(http://plnkr.co/)等。筆者在幾個(gè)實(shí)際項(xiàng)目中使用了該思想,各項(xiàng)目穩(wěn)定上線運(yùn)行,反響良好,達(dá)到了預(yù)期效果。

        [1]吳權(quán),賴斌.淺談新網(wǎng)絡(luò)技術(shù)標(biāo)準(zhǔn)帶來(lái)的改變[J].電腦知識(shí)與技術(shù),2010,6(15):3937-3938.

        [2] 劉悅之.基于Git的分布式版本控制系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)[J].科技傳播,2012,(22):197-198.

        [3] Liu, Chamond.SmallTalk, Objects, and Design[K].iUniverse, 2000.

        猜你喜歡
        開(kāi)發(fā)人員服務(wù)器端代碼
        Semtech發(fā)布LoRa Basics 以加速物聯(lián)網(wǎng)應(yīng)用
        創(chuàng)世代碼
        創(chuàng)世代碼
        創(chuàng)世代碼
        創(chuàng)世代碼
        淺析異步通信層的架構(gòu)在ASP.NET 程序中的應(yīng)用
        成功(2018年10期)2018-03-26 02:56:14
        在Windows中安裝OpenVPN
        讓W(xué)indows 10進(jìn)入開(kāi)發(fā)者模式
        電腦迷(2015年12期)2015-04-29 23:22:51
        后悔了?教你隱藏開(kāi)發(fā)人員選項(xiàng)
        網(wǎng)頁(yè)防篡改中分布式文件同步復(fù)制系統(tǒng)
        草草浮力地址线路①屁屁影院| 日韩av一区二区三区高清| 国产高清不卡在线视频| 一区二区视频中文字幕| 无码精品一区二区三区在线| 色一情一乱一乱一区99av| 在线观看亚洲AV日韩A∨| 午夜亚洲精品一区二区| 成午夜福利人试看120秒| 无码视频在线观看| 波多野结衣aⅴ在线| 久久成人永久免费播放| 91久久综合精品国产丝袜长腿| 亚洲狠狠久久五月婷婷| 国产亚洲精品品视频在线| 国产欧美精品一区二区三区四区| 精品人妻伦九区久久aaa片| 国产黄三级三·级三级| 日本岛国精品中文字幕| 人妻在线有码中文字幕| 国产亚洲精品综合一区| 精品国产sm捆绑最大网免费站| 欧美z0zo人禽交欧美人禽交| 中文字幕乱码中文乱码毛片| 99精品国产综合久久麻豆| 国产青榴视频在线观看| 久久久伊人影院| 青青草绿色华人播放在线视频| 精品香蕉一区二区三区| 美女视频黄的全免费的| 国内精品伊人久久久久av| 羞涩色进入亚洲一区二区av| 射精区-区区三区| 人妻aⅴ无码一区二区三区| 国产美女黄性色av网站| 全国一区二区三区女厕偷拍| 久久亚洲av午夜福利精品一区| 台湾佬自拍偷区亚洲综合| 欧美性久久| 久久精品伊人久久精品| 国产精品videossex国产高清|