自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

一個(gè)前端與后端分離的架構(gòu)實(shí)例

開發(fā) 架構(gòu)
一個(gè)優(yōu)秀的WEB架構(gòu),必定會(huì)應(yīng)用一些分層設(shè)計(jì)的思想,這樣可以讓系統(tǒng)開發(fā)起來更靈活,同時(shí)后期維護(hù)也比較方便。本文作者麥?zhǔn)嬖O(shè)計(jì)了一個(gè)前端與后端分離的架構(gòu),原文分享如下:

 

一個(gè)優(yōu)秀的WEB架構(gòu),必定會(huì)應(yīng)用一些分層設(shè)計(jì)的思想,這樣可以讓系統(tǒng)開發(fā)起來更靈活,同時(shí)后期維護(hù)也比較方便。本文作者麥?zhǔn)嬖O(shè)計(jì)了一個(gè)前端與后端分離的架構(gòu),原文分享如下:

看了《系統(tǒng)架構(gòu):Web應(yīng)用架構(gòu)的新趨勢(shì)—前端和后端分離的一點(diǎn)想法》 這篇文章,對(duì)前端與后端的分離非常認(rèn)同,這樣做對(duì)于系統(tǒng)的維護(hù)是有相當(dāng)大的 好處的。正好自己也設(shè)計(jì)了一個(gè)這樣的系統(tǒng),于是把它拿出來,和大家討論一下。這個(gè)架構(gòu),與其說是想出來,還不如說是我做系統(tǒng)總結(jié)出來的***實(shí)踐。

我們做的系統(tǒng),前端的頁(yè)面基本都是使用 JavaScript 的富戶端頁(yè)面,主要應(yīng)用的框架用,jquery、jquery ui、knockout js、Durandal、另外,還有自己封裝的一些 UI 組件,后端的主要采用到的技術(shù)有 OData、MVC、Linq to SQL 以及自己寫的一個(gè)權(quán)限管理組件,數(shù)據(jù)庫(kù)采用的是 SQL Server 2005。

下面向大家介紹一下各模塊的功能以及其劃分的目的,我們先從用戶界面看起吧

一、關(guān)于前端的 dataProvider

簡(jiǎn)單點(diǎn)說,就是一個(gè)給界面調(diào)用的數(shù)據(jù)訪問層,很多人都人這樣的疑問,在這里加一個(gè)數(shù)據(jù)訪問層,是不是多余?只要你做的前端,你都會(huì)碰到下面這些問題:

1、一個(gè)產(chǎn)品或者項(xiàng)目,前端與后端是同時(shí)進(jìn)行了,這時(shí)候,根本沒有后端的接口,甚至可以說,連個(gè)接口的定義都沒有。作為前端開發(fā)人員,你如何去開展自己的工作?

2、作為前端開發(fā)人員,你有沒有碰到,因?yàn)楹蠖说慕涌趻斓?,?dǎo)致你的工作沒法繼續(xù)做下去的情形?

3、作為前端開發(fā)人員,往往免不了要和第三方的接口進(jìn)行對(duì)接,你有沒有碰到過,和你做對(duì)接的人員,突然因?yàn)轫?xiàng)目緊,被抽走了,留給你的只有一堆需要 傳N個(gè)參數(shù),傳了后接著出“對(duì)象為空”的異常呢?你根本不知道哪里參數(shù)傳錯(cuò)了。面對(duì)這些接口,你除了破口大罵,得不到任何幫助。

4、作為前端開發(fā)人員,你有沒有試過,你向后端的開發(fā)組,要一個(gè)接口,他們需要討論個(gè)幾天,然后再花幾天才能給你,給你之后,還不能用,又得再花幾天時(shí)間調(diào)試呢?

如果你向我一樣,都曾經(jīng)都碰過這些問題,你就不會(huì)懷疑這個(gè) dataProvider 存在的必要了,有了這個(gè) dataProvider,可以***減少后端接口對(duì)前端開發(fā)的影響。下面是一個(gè) dataProvider 的實(shí)例:

var dataProvider = (function () {

    var fakeProvider = {
        countries: new Countries()
    };

    var realProvider = {
        countries: new JData.WebDataSource()
    };

    //下面的接口,根據(jù)情況二選一
    return fakeProvider; //這個(gè)是假的 dataProvider,從本地讀
    return realProvider; //這個(gè)是真正 dataProvider,從接口讀
})();

從上面可以看出來,這個(gè) dataProvider 使用了工廠模式來創(chuàng)建,它有兩個(gè)實(shí)例,fakeProvider和realProvider,fakeProvider是用來提供一些模擬數(shù)據(jù),而 realProvider提供從接口讀取出來的數(shù)據(jù)。當(dāng)沒有接口,或者接口掛掉,我們可以先從 fakeProvider 來讀取數(shù)據(jù)。等接口好了,切換到 realProvider 。

二、關(guān)于用戶界面輸入的驗(yàn)證

1、數(shù)據(jù)的驗(yàn)證。用戶在界面輸入數(shù)據(jù)后,接著調(diào)用 dataProvider 里的接口對(duì)數(shù)據(jù)進(jìn)行處理,但是在向服務(wù)端提交之前,得先對(duì)數(shù)據(jù)進(jìn)行驗(yàn)證。那個(gè)這個(gè)驗(yàn)證如何進(jìn)行呢?dataProvider先從服務(wù)端獲實(shí)體的描述信息, 這些描述包括但不限于:主外鍵、屬性的驗(yàn)證信息(比如是否可空),當(dāng)然,這個(gè)實(shí)體信息是可以緩存起來,以便重用的。然后 dataProvider 再根據(jù)這個(gè)描述信息來對(duì)數(shù)據(jù)進(jìn)行驗(yàn)證。

2、錯(cuò)誤信息的顯示

當(dāng)驗(yàn)證到某一個(gè)屬性不合法,驗(yàn)證信息的模塊就在頁(yè)面查找出對(duì)應(yīng)輸入控件,它是怎么查找的呢?比如說,Contry 的 Name 輸入為空是不可以的。那它就先查找 id 為Coutry的元素,然后再Coutry元素下面再找id 或者 name 為 Name 的控件,如果找不到則直接彈窗顯示錯(cuò)誤信息。例如:

<form id="Country">
       <input name="Name"/>
</form>

三、關(guān)于后端使用 OData

1、作為后端開發(fā)人員,你有沒有碰到過這種前端開發(fā)人員,今天讓你加一個(gè)字段,好,加了,然后打包發(fā)布。明天又讓你加一個(gè)字段。后天突然又說,前兩天加的字段,不需要,你會(huì)不會(huì)有種想喊“操”的沖動(dòng)?

2、作為后端開發(fā)員員,你有沒有碰到過這種前端開發(fā)人員,今天跟你說接口不夠用,要加個(gè) GetUserByName 的方法,明天又說,還得加個(gè) GetUserByEmail 的方法?然后,過了一段時(shí)間,你發(fā)現(xiàn)接口越來越多,維護(hù)的模塊越來越癰腫,并且這些接口,你只敢加,不敢刪除。因?yàn)?,你根本不知道這些,有哪個(gè)不用的,你 跑去問前端,他也回答不出來。所以一些接口哪怕是沒用的,也只能永遠(yuǎn)系統(tǒng)里,直到它生命周期的結(jié)束。

如果你也碰到類似于我這種煩惱,使用 OData 也許是一個(gè)不錯(cuò)的選擇,把查詢的權(quán)限都開發(fā)給前端的開發(fā)人員,他愛怎么查就怎么查,都由它去。

四、關(guān)于后端使用MVC

我們的系統(tǒng),使用MVC都是用來處理從前端提交上來的數(shù)據(jù)的,使用它主要是開發(fā)人員都熟悉MVC,然后MVC再調(diào)用業(yè)務(wù)層代碼,同時(shí),還需要處理:

1、對(duì)提交上來的數(shù)據(jù)進(jìn)行驗(yàn)證

2、處理系統(tǒng)的異常,包括對(duì)異常進(jìn)行重新的包裝,再傳回到客戶端,以便于客戶端的處理。對(duì)異常的信息進(jìn)行記錄。

五、數(shù)據(jù)訪問層

關(guān)于數(shù)據(jù)訪問層,在我們的系統(tǒng)里實(shí)際是一個(gè) ORM 的包裝器(ORM Wrapper),你在對(duì) ORM 裹上一層外衣。目的在于:

1、對(duì)數(shù)據(jù)進(jìn)行攔截。例如:有些數(shù)據(jù),只對(duì)某個(gè)角色的開發(fā)。數(shù)據(jù)訪問層需要對(duì)根據(jù)過濾條件,然后再結(jié)合查詢條件,重新生成SQL。

2、對(duì)數(shù)據(jù)假刪除的處理。見過很多系統(tǒng),都是把刪除放到業(yè)務(wù)層來進(jìn)行的,其實(shí)這是不適合的,從業(yè)務(wù)的角度來說,關(guān)心的是刪除,在執(zhí)行刪除后,這條數(shù) 據(jù)從我眼前消失就可以了。至真刪除還是假刪除,這與我無關(guān)。數(shù)據(jù)訪問層,要做的就是這工作,它可以數(shù)據(jù)在真刪除與假刪除之間進(jìn)行切換,只要配置一下,就可 以把真刪除變成假刪除(其實(shí)就是把Delete操作變成Update操作),使得進(jìn)行業(yè)務(wù)開發(fā)人員,不用再關(guān)心數(shù)據(jù)的真假刪除。

3、對(duì)數(shù)據(jù)進(jìn)行跟蹤、備份。你肯定碰到過這么一種需要,需要記下來,每一次的更新操作的時(shí)間,以及更新了些什么內(nèi)容。對(duì)于刪除的數(shù)據(jù),能夠把它還原 回來。數(shù)據(jù)訪問層,通過對(duì) ORM進(jìn)行包裝,完全可以記錄下每一次更新、刪除這些操作,然后記錄下來即可。當(dāng)然,這些需求利用數(shù)據(jù)提供的功能也是可以實(shí)現(xiàn)的,不在討論的范圍內(nèi)。

 

 

 

 

責(zé)任編輯:王雪燕 來源: 麥?zhǔn)娴牟┛?/a>
相關(guān)推薦

2014-02-17 17:47:16

前端后端架構(gòu)

2015-11-12 10:32:27

前端后端分離

2019-06-12 19:00:14

前后端分離AppJava

2020-08-24 13:07:59

軟件架構(gòu)前后端架構(gòu)分離

2015-01-08 10:08:03

前后端分離

2020-03-20 09:04:47

后端程序員前端代碼

2019-01-18 08:28:21

服務(wù)器程序架構(gòu)

2020-10-08 18:20:54

前端后端架構(gòu)

2017-02-15 10:18:32

架構(gòu)前后端分離

2019-04-29 14:51:05

前后端JavaVue.js

2021-06-24 09:53:05

前端架構(gòu)開源

2017-11-15 07:01:33

互聯(lián)網(wǎng)分層架構(gòu)前后端

2009-07-15 13:41:00

JDBC實(shí)例

2014-02-17 17:40:13

系統(tǒng)架構(gòu)Web架構(gòu)

2023-01-03 12:30:25

架構(gòu)CPUGPU

2023-02-08 16:29:58

前后端開發(fā)

2011-09-08 13:41:53

Widget

2020-05-25 16:05:17

前端限控制設(shè)分離

2009-12-21 16:31:15

靜態(tài)路由設(shè)置

2009-07-30 18:18:27

C#時(shí)間計(jì)算
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)