亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

Octopus系列之開發過程各個技術點

2019-11-17 02:01:27
字體:
來源:轉載
供稿:網友

Octopus系列之開發過程各個技術點

2015-03-06 11:57 by 星空物語, ... 閱讀, ... 評論, 收藏, 編輯

自定義了頁面周期

使用唯一的一個VelocityEngine全局的靜態實例,優化了小泥鰍blog中每次請求都要創建VelocityEngine實例對象,減少了對象的開銷

通過UA判斷請求來自的設備,從而初始化不同的模板目錄,從而實現手機和PC訪問展示出不同的頁面效果

一次請求的生命周期

參數初始化Page_Init:

初始化請求上下文對象

請求對象

Cookie對象

貨幣對象

語言對象

初始化貨幣執行業務邏輯并寫入到客戶端的Cookie中

驗證用戶的身份 Authenticate_User

頁面預加載Page_PReLoad:會加載一些公共的數據,比如:圖片URL地址,廣告圖片地址...;加載語言包數據;判斷Form參數個數引發Post事件

頁面加載事件Page_Load:需要留給各個子頁面實現,必須實現的一個,主要在子頁面中完成各自的業務處理,數據獲取與填充

頁面預結束事件Page_PreEnd:暫時還沒有做處理

頁面結束事件 Page_End:合并模板和業務數據

this.pcMobile【判斷請求時做的初始化】 + this.templateFile 【在各個子頁面重寫Page_Load事件時做初始化】

用戶驗證邏輯的實現

使用虛擬的protected virtual void Authenticate_User()來實現,這樣可以被子類重寫,從而可以做后臺管理類的程序,比如會員中心里面的頁面,需要用戶登錄之后才能訪問

判斷用戶登錄使用的是檢查session中登陸的用戶對象來實現的 同時還有關于匿名用戶登陸的問題,這個在后面解決

產品價格--多貨幣的實現

多貨幣 它屬于每個訪客自定義的數據,所以它不能存儲在application中,應該存儲在Cookie中,或者session中

Octopus使用是Cookie的方式實現的

不讓Entity承擔過多的業務邏輯

在寫的過程中,為貨幣Cookie的問題困擾了好久,產品價格的計算需要,產品對象拿到貨幣對象之后才能進行

起初我是在Entity中讀取Cookie值來獲得貨幣對象,后來發現這樣做不好

一是,每個產品對象的創建需要不能的讀取cookie

二是,在ProductInfo 實體中承擔了過多的業務處理邏輯

再者,好像在entity中不應該有訪問Cookie之類的代碼吧,

后來進行了改進,將這部分代碼轉移到業務層,在業務層中接收CurrencyInfo對象,對ProductInfo對象做屬性的初始化,這樣解決了這個問題

同時cookie的讀取則轉移到了表現層的Page_Load中,而且并不是直接訪問cookie,而是在數據上下文容器中取得貨幣符號,進而得到貨幣對象來實現的

這個算是比較成功一次代碼的升級

多語言的分頁樣式

分頁樣式也是一個比較重要的問題,Octopus是考慮多語言的,分頁樣式也是有一定多樣性的

一般我們來實現就是編碼生成 一段分頁條的HTML代碼片段,然后配合CSS樣式實現分頁,這個我參考了DTCMS中的代碼,拿來主義

我感覺還是不錯的,而且DTCMS上使用的是雙top的分頁算法,還是比較高效的

這是一種處理思路,Octopus就是這種方式實現的

第二種思路是,將分頁條進行模板化,也有現成的代碼,不過我沒有采用這種方式,有點復雜,但是樣式的可定義性,就非常的高

分頁樣式的處理和我后面介紹的關于無限級別分類的處理思路上是一樣的。Octopus借助了NV模板引擎,所以在實現上要考慮NV引擎這一點

思路說完了,還是需要做一點改進的,前面第一種思路幫我實現了分頁的算法問題,這個是解決掉了

那么多語言切換的時候,分頁條該怎么變化呢?要和語言包定義的數據進行交互

比如:首頁【中文】---First【英語】

我將生成分頁條的OutPageList算法增加了一個paramsstring[] langPage類型的參數,將里面固定的 字符使用傳遞進來的參數進行替換掉

犧牲掉了一部分的樣式靈活性,在調用的時候,需要從NV引擎的數據上下文中讀取定義的 首頁 上一頁 下一頁 尾頁 等數據 就可以了

備注:在頁面周期的Page預加載事件中我們加載了語言包的數據【這個地方還需要做一定的優化,需要將數據進行一個緩存的處理】

這樣分頁條多語言的問題也解決掉了

無限分類的問題

無限分類的問題是最早開始解決的問題,也是花費時間比較長的問題,

大概有兩個難點

一是:怎么設計無限分類的信息表,怎么存儲無限分類的數據

二是:Octopus使用了NV引擎,產品分類的展示樣式也是千變萬化的,我在NV模板中該怎么寫這樣的代碼呢?

先說第一個問題吧,表設計,其實大家都很清楚,有一個Parentid字段來標識當前分類的父分類ID,還會有一些附加的字段

ClassPath,記錄分類的導航路徑【一個分類ID以逗號分隔的一段字符】ClassLayer【節點的深度】,可以研究一下DTCMS中的設計

我基本就是參考它的。

還有一種設計方案叫做 左右值的無限分類 在網上有說明的,不過我沒研究清楚,沒法使用,基本就這兩種吧,看大家怎么選擇

下面一個比較關鍵的問題:如果所有分類讀取出來放到NV引擎上展示出來?---后續會有

購物車的實現

提供幾種思路實現

思路一:通過內置的OnPost自定義的Post機制實現

其內部的觸發機制是:通過請求的參數個數來進行觸發的

            if (_Request.Form.Count > 0)            {                OnPost();            }

這種方式來處理頁面的提交機制

然后通過兩種方式區分頁面發起的不同類型的請求

1.通過"成功控件實現"

2.通過"hd_action"隱藏域的類型來判斷

不過這種方式 有個問題:用戶在 右鍵單擊 “重新加載”時 會提示重新 表單提交的問題

解決這個方式 也有兩種方式:

1.使用${reload} js代碼 響應到客戶端,一旦用戶觸發頁面的post事件時,就從服務端響應一段js腳本到客戶端,在客戶端在重新發起一次請求

這樣就不會有 重復表單的提示。

2.后來發現可以不用這樣做哦:使用Context.Response.Redirect(Request.RawUrl, true); 重新加載一次頁面就可以了,一旦執行完畢post

的動作:更新,或刪除,直接讓客戶端重新定向到新的URL發起一次請求,通過fiddler可以發現,每執行一個動作先是302的http代碼,然后是200

兩種方式都可以解決這個問題

使用js的方式 稍微慢了一點,因為post動作多執行了一次頁面的周期Page_Load

優點:可以在任意的放加上任意多的form標記,這個和aspx只有一個form標記不同

既可以使用submit和image標簽提交表單,也可以自定義函數調用表單的submit()函數從而完成表單的提交

還有就是不使用該死的腳本了,不用調試了 哈哈 只要有form就可以提交 簡單死了

缺點:只要對象和服務端進行交互,就一定要有form標記,而且還有借助很多的隱藏標記

思路二:通過前臺腳本的方式

前面說了上一種方式的實現 離不開form的標記,如果我們不用form標記,并且有時還要有get方式提交咋個辦呢?

那就只能通過腳本Ajax的方式實現了

首先:如何存儲自定義的數據,form中我們要存儲自定義數據的話 使用的是hidden標記。使用思路二時: 使用data-*自定儀的屬性

將一次請求所有用到的參數數據都存儲在data-*里面,通過jq和js方式逐個獲取,唉沒有jq.serialize();的方法方便啊【后面自己寫一個類似的方式實現data-*的批量獲取】

function DomSerialize(dom){    if (dom)    {        var attr = dom.attributes;        var attrArr = [];        if (attr.length > 1)        {            //追加附加屬性            for (var i = 0; i < attr.length; i++)            {                if (attr[i].name.indexOf("data-") != -1)                {                    if (attr[i].name.indexOf("data-action") != -1)                    {                        attrArr.push(encodeURIComponent(attr[i].name.replace(/data-/, "my")) + "=" + encodeURIComponent(attr[i].value));                    }                    else                    {                        attrArr.push(encodeURIComponent(attr[i].name.replace(/data-/, "hd_")) + "=" + encodeURIComponent(attr[i].value));                    }                }            }            //追加當前元素的屬性            attrArr.push(encodeURIComponent(dom.name) + "=" + encodeURIComponent(dom.value));        }        return attrArr.join("&");    }    //attributes返回當前元素的所有屬性數組 我們只選取包含data 開頭的屬性,并添加到當前數組中去,并將當前元素的name屬性和value也添加進去}

好了,準備工作完畢。接下來 發起請求就行了,通過ajax的請求配置包 common.js和Lee輔助腳本實現即可

對了,刷新說一下【如果請求成功將會執行】,使用js的方式進行刷新

思路三:使用ajax+模板的方式【名字還沒想好先暫時到這兒】;

組件化的設想

已經實現了登錄,購物車 ,注冊等模塊的組件化

會員中心的實現

實現思路有三種方式,第三種方式目前還不是很確定是否能實現

思路1:會員中心的實現都在一個ashx中實現,通過不同參數的傳入,來實現不同的邏輯模塊,實現不用模板的加載,同時將左側的Left,作為一個Widget

思路2:反著來。實現一個母版頁,通過if的判斷語句,在右側的加載各個組件

思路3:利用最原始的"子模板"的思路,這個還在思考中


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
亚洲精品欧美日韩专区| 精品国产一区二区三区久久久狼| 中文字幕亚洲欧美日韩高清| 亚洲男人第一av网站| 中文字幕亚洲欧美日韩在线不卡| 国产精品久久久久久久久免费看| 欧美性生交xxxxx久久久| 亚洲视频在线播放| 亚洲精品国产精品乱码不99按摩| 亚洲综合日韩中文字幕v在线| 国产精品自产拍高潮在线观看| 久久久999精品视频| 九色精品美女在线| 日韩大片免费观看视频播放| 国产精品免费在线免费| 一本一本久久a久久精品综合小说| 亚洲一区二区久久| 久热精品视频在线观看| 亚洲国产成人久久综合| 伊人激情综合网| 日韩欧美在线视频观看| 国产精品成人观看视频国产奇米| 国产精品一区二区久久| 国产精品va在线播放我和闺蜜| 亚洲精品视频久久| 亚洲福利影片在线| 亚洲天堂色网站| 精品成人av一区| 欧美电影免费观看高清| 成人观看高清在线观看免费| 中文精品99久久国产香蕉| 日韩视频免费大全中文字幕| 国产精品国内视频| 欧美性猛交xxxx富婆| 在线观看久久av| 黑人巨大精品欧美一区二区三区| 91精品国产综合久久香蕉最新版| 国产视频精品va久久久久久| 97欧美精品一区二区三区| 色中色综合影院手机版在线观看| 欧美美最猛性xxxxxx| 午夜精品一区二区三区在线| 亚洲香蕉伊综合在人在线视看| 成人午夜两性视频| 精品亚洲一区二区三区四区五区| 亚洲精品日韩欧美| 国产精品99久久久久久久久久久久| 国产综合久久久久| 成年人精品视频| 久久久国产在线视频| 色噜噜狠狠狠综合曰曰曰| 亚洲高清一区二| 久久免费在线观看| 国产精品人成电影在线观看| 欧美福利在线观看| 免费91麻豆精品国产自产在线观看| 国产精品一区二区三区免费视频| 国产偷亚洲偷欧美偷精品| 亚洲精品乱码久久久久久金桔影视| 亚洲专区在线视频| 亚洲乱码国产乱码精品精| 国产精品狼人色视频一区| 国产日韩换脸av一区在线观看| 欧美色道久久88综合亚洲精品| 久久精品国产欧美亚洲人人爽| 91日韩在线播放| 亚洲成成品网站| 国产午夜精品视频| 日本成人在线视频网址| 91久久精品在线| 欧美日韩一区二区在线| 国产精品av免费在线观看| 久久这里有精品视频| 久久久爽爽爽美女图片| 国产在线不卡精品| wwwwwwww亚洲| 欧美午夜www高清视频| 美日韩精品免费观看视频| 欧美专区福利在线| 国模叶桐国产精品一区| 日本一区二三区好的精华液| 亚洲va久久久噜噜噜久久天堂| 久久亚洲综合国产精品99麻豆精品福利| 亚洲午夜女主播在线直播| 色中色综合影院手机版在线观看| 黑人狂躁日本妞一区二区三区| 精品精品国产国产自在线| 一区二区三区视频观看| 亚洲女人天堂色在线7777| 欧美在线精品免播放器视频| 97超级碰在线看视频免费在线看| 国产午夜精品视频免费不卡69堂| 成人亲热视频网站| 国产精品稀缺呦系列在线| 欧美色视频日本版| 亚洲美女av黄| 在线观看欧美www| 国产日韩欧美夫妻视频在线观看| 77777亚洲午夜久久多人| 国内精品视频久久| 日韩综合视频在线观看| xx视频.9999.com| 成人网欧美在线视频| 亚洲成人黄色在线| 免费不卡在线观看av| 日韩欧美中文免费| 国产999在线观看| 福利视频第一区| 国产精品v日韩精品| 亚洲欧美另类人妖| 欧美日韩视频免费播放| 国内免费久久久久久久久久久| 日韩久久午夜影院| 欧美性xxxx在线播放| 欧美激情一级欧美精品| 在线播放日韩精品| 欧美精品video| 久久影视电视剧免费网站清宫辞电视| 欧美激情一区二区三区成人| 97av在线视频免费播放| 精品视频久久久久久久| 欧美成人激情图片网| 日韩在线视频中文字幕| 免费av在线一区| 伊人伊成久久人综合网站| 日韩精品视频在线播放| 中文字幕亚洲图片| 欧美视频免费在线观看| 欧美极度另类性三渗透| 欧美精品激情在线观看| 久久夜色精品国产欧美乱| 亚洲精品在线看| 亚洲欧美www| 精品国产一区二区三区久久久| 欧美激情亚洲一区| 久久精品视频在线播放| 色婷婷综合久久久久中文字幕1| 羞羞色国产精品| 97视频免费看| 爱福利视频一区| 国内揄拍国内精品| yw.139尤物在线精品视频| 久久久噜久噜久久综合| 欧美人在线观看| 亚洲天堂视频在线观看| 国产日韩欧美另类| 日韩少妇与小伙激情| 日本最新高清不卡中文字幕| 欧美激情精品久久久久久免费印度| 91日本视频在线| 国产精品热视频| 国产一区二区三区视频在线观看| 日韩av综合网站| 久久人人爽人人爽人人片av高请| 91社影院在线观看| 久久久久久久999精品视频| 欧美激情精品久久久久久免费印度| 国产成人黄色av| 亚洲精品国产精品国自产观看浪潮| 亚洲国产精品美女| 亚洲精品国产精品久久清纯直播| 欧美亚洲在线视频| 美女视频黄免费的亚洲男人天堂| 国产精品久久久久免费a∨大胸|