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

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

3.Magicodes.NET框架之路——預覽(一)

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

3.Magicodes.NET框架之路——預覽(一)

3.Magicodes.NET框架之路——預覽(一)

  • 前言

一眨眼,已經過去兩個多月了 ,哥已經火力全開了(業余時間和精力,甚至為此放棄了各種私活),所以大家不要抱怨慢哈。編程猶如逆水行舟,不進則退。這段時間,一方面是不斷地重構和設計框架,另一方面也系統的學習了很多新技術,同時也感受到了其強大的生命力。

所以這兩個多月,也感慨良多。兩個多月的業余時間和精力,兩個多月沒玩LOL和CF,兩個多月的全身心投入……

現在本篇就重點說說架構這些事:

  1. 架構多次重構,甚至核心模塊多次推倒重來。
  2. 架構已支持MVC,不過卻暫時放棄了WebForm,當然也有可能永久放棄WebForm,畢竟我目前只是一個人在戰斗,兼容兩套時間精力都極為有限。
  3. 引入了T4,已支持基于T4模板的代碼生成。
  4. 已支持SignalR。
  5. 已支持asp.net Identity以及集成OAuth(Microsoft、QQ、Google…),暫時移除了對Form驗證的支持。
  6. 支持WebAPI和Odata。
  7. 前端框架初成,支持響應式布局以及MVVM模式和模塊化加載。
  8. 其他

接下來,我一一簡單的介紹下本框架好了。

首先,先從前端開始介紹吧:

  • 響應式布局的UI

后臺:

其他設備(為了用戶體驗,后臺框架使用了Iframe,在其他設備上訪問時,可能多少會有些問題):

還有個列表頁面,但是更改為MVC后,還沒來得及改好。

前臺:

  • 模塊化按需加載

前端JS寫了一部分,但是感覺還遠遠達不到完善的級別。很希望哪位前端工程師能夠給予支持,這樣我的重心就更好的放到后端架構上了。

在JS的選擇上,最終選擇了優秀的RequireJs,一直用下來,感覺比SeaJs更完善,更好用和更易用。

先看幾段Demo,比如登錄頁面:

Magicodes.js做了不少封裝,當然是為了最大限度的節省生產力。整個登錄機制就是以上腳本搞定,當然還與MVVM有關聯,這個是下面要介紹的。

Magicodes.js為目前的前端框架核心庫,當然目前還稱不上庫。其內部很多模塊也都是按需加載的,比如:

window.magicodes.messager = {

showMessage: function (title, message, className, funcs) {

var setting = {

title: title,

text: message,

class_name: className

};

if (typeof (funcs) !== "undefined") {

if (typeof (funcs.before_close) !== "undefined")

setting.before_close = funcs.before_close;

if (typeof (funcs.after_open) !== "undefined")

setting.after_open = funcs.after_open;

}

this._addGritter(setting);

},

showInfoMessage: function (title, message, funcs) {

this.showMessage(title, message, 'gritter-info gritter-light', funcs);

},

showErrorMessage: function (title, message, funcs) {

this.showMessage(title, message, 'gritter-error gritter-light', funcs);

},

showWarnMessage: function (title, message, funcs) {

this.showMessage(title, message, 'gritter-warning gritter-light', funcs);

},

removeAll: function () {

typeof ($.gritter) !== "undefined" && $.gritter.removeAll();

},

_addGritter: function (setting) {

require(["jquery", "jquery.gritter"], function () {

$.gritter.add(setting);

});

}

};

這個是彈出消息的,如:

這里就不多說了。

  • MVVM

在MVVM框架的選擇上,最終選擇了knockoutjs。主要是夠輕量級,也夠靈活。用下來,感覺相當不錯。

比如登錄頁面:

登陸頁面這個比較簡單,重點是導航的綁定,馬上給大家秀一段。

按照傳統的方式來開發如下圖所示的功能,少不了遞歸綁定(支持多級),一堆的JS控制,一堆的業務代碼(其實開始我也是寫代碼的,后面才改為了MVVM模式,走彎路了,呵呵)

那么現在是怎么做到的呢?如下面代碼:

也就是我的綁定邏輯已經脫離了數據模型,前臺顯示我只需要改動這段代碼即可。是不是很強悍呢?

然后JS只要給到數據即可。后臺從WebAPI拿到如下JSON:

然后JS處理下,根據父子關系,生成children屬性(方便視圖綁定):

//添加菜單子項

//源數據

//當前項

this._appendChildrenMenus = function (data, itemData) {

var childrenNavs = $.grep(data, function (i) {

return i.ParentId == itemData.Id;

});

if (childrenNavs.length > 0) {

itemData.children = childrenNavs;

$.each(childrenNavs, function (i, v) {

v._active = ko.observable(false);

v._open = ko.observable(false);

self._appendChildrenMenus(data, v);

});

}

};

核心代碼主要如下:

使用knockoutjs是不是很方便呢?其實knockoutjs很不錯,除了這些,knockoutjs可以干很多很便捷的事情,比如綁定分頁,綁定列表,綁定表單,這里只是做一些列舉,后面開貼細講,畢竟knockoutjs的實例還是比較少的。

這里再付一個分頁的模板:

<script id="pagesTemplate" type="text/html">

<li class="CSS: { disabled: $root.gridViewModel.currentPageIndex() <= 1 }, click: function () { $root.previousPage(); }">

<a href="#">

<i class="ace-icon fa fa-angle-double-left"></i>

</a>

</li>

<!-- ko foreach: $root.gridViewModel.pages -->

<li data-bind="css: { active: $data == $root.gridViewModel.currentPageIndex() }"><a href="#" data-bind=" text: $data, click: function () { $root.gridViewModel.currentPageIndex($data); } "></a></li>

<!-- /ko -->

<li class="next" data-bind="css: { disabled: $root.gridViewModel.currentPageIndex() >= $root.getTotalPages() }, click: function () { $root.nextPage(); }">

<a href="#">

<i class="ace-icon fa fa-angle-double-right"></i>

</a>

</li>

</script>

前端的先就介紹到這里吧,期待前端工程師的加入,讓我們一起來打造Magicodes前端框架。

現在,來說說后臺框架吧:

  • 插件式架構

如下圖,這是目前的項目結構。

視圖頁、控制器、策略、數據模型、Service(含WebApi和Odata)均以插件存在。

在我這里,Service插件和傳統的層有很大區別。我這里的Service組件側重與WebApi和Odata提供的Web接口。

  • MVC

目前已經移除了 對WebForm的支持,正所謂有了老婆忘了娘。嘿嘿。

注意:配置管理的所有配置視圖和控制器使用了T4模板自動生成。這個下面會介紹。

  • ASP.NET Identity 和OAuth

Magicodes.NET支持?ASP.NET Identity以及OAuth協議,在不編寫一行代碼的情況下,您就可以便捷的集成QQ、Microsoft、Google、Facebook、Twitter等OAuth接口。

后面還會支持更多…

  • WebAPI

曾經我也設計了一套WebAPI,目前已經移除了對此API的支持。改為基于微軟的WebAPI進行封裝。從一接觸WebAPI就喜歡上它了,毋庸置疑,她將來的成就會不可限量。這里簡單的介紹下:

比如剛才看到的站點信息配置頁面,其WebAPI如下:

這里很明顯的是一套基于REST協議標準的Web方法。WebAPI并不一定必須基于REST協議來設計哈,只是推薦而已。

Get、Post、Put,其實還有Delete(這里因為配置文件不能刪除),這是Rest協議標準的Web方法。一流公司制定標準,我們要抓緊抱佛腳。不要認為標準離我們很遠,你不去擁抱,人家能主動過來么?

先介紹下REST協議,代表性狀態傳輸(Representational State Transfer,REST)在 Web 領域已經得到了廣泛的接受,是基于 SOAP 和 Web 服務描述語言(Web Services Description Language,WSDL)的 Web 服務的更為簡單的替代方法。接口設計方面這一轉變的關鍵證據是主流 Web 2.0 服務提供者(包括 Yahoo、Google 和 Facebook)對 REST 的采用,這些提供者棄用或放棄了基于 SOAP 和 WSDL 的接口,而采用了更易于使用、面向資源的模型來公開其服務。

也順便多說點。REST 要求開發人員顯式地使用 HTTP 方法,并且使用方式與協議定義一致。這個基本 REST 設計原則建立了創建、讀取、更新和刪除(create, read, update, and delete,CRUD)操作與 HTTP 方法之間的一對一映射。根據此映射:

  • 若要在服務器上創建資源,應該使用 POST 方法。
  • 若要檢索某個資源,應該使用 GET 方法。
  • 若要更改資源狀態或對其進行更新,應該使用 PUT 方法。
  • 若要刪除某個資源,應該使用 DELETE 方法。

我前面為什么說WeAPI會爆發出強大的生命力?是因為之前的WebServices也好,還是SOAP等接口已經不滿足現有的使用場景了。很多時候,我們的接口內容得看什么終端輸出什么,就如見什么人說什么話一樣??匆奌tml調用,給他JSON就好了,C#、java客戶端調用,就給他返回xml讓他去玩好了,MongoDB也要玩,給他BSON就好了。還有不支持的?自己定義好了??傊?,程序員們放心了,接口要支持新的平臺,我們啥都不需要干了。我們也不需要維護多套代碼了。這是多么Happy的事情呀。當然返回什么,是HTTP Accept Header決定的。

我們讓他返回JSON

他就乖乖的返回了JSON:

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
国产精品天天狠天天看| 国产精品自拍网| 一区二区三区天堂av| 欧美性xxxxx极品娇小| 尤物99国产成人精品视频| 在线观看欧美日韩| 久久视频在线播放| 亚洲色图国产精品| 亚洲国产精品专区久久| 欧美影院久久久| 在线观看欧美日韩国产| 亚洲视频在线观看视频| 亚洲一区中文字幕| 中文字幕精品在线视频| 欧美激情a∨在线视频播放| 中文字幕在线日韩| 琪琪亚洲精品午夜在线| 欧美性猛交xxxx黑人猛交| 26uuu另类亚洲欧美日本老年| 久久精品视频导航| 国产91精品久久久久久久| 久久夜色精品国产欧美乱| 亚洲福利视频网站| 欧美性猛xxx| 九九久久精品一区| 亚洲精品日韩激情在线电影| 亚洲黄色片网站| 日韩精品在线观看一区二区| 亚洲第一男人天堂| 国产精品夜间视频香蕉| 奇米四色中文综合久久| 亚洲精品中文字| 亚洲第一精品夜夜躁人人爽| 尤物99国产成人精品视频| 日韩影视在线观看| 欧美午夜片欧美片在线观看| 久久男人的天堂| 久久久久成人网| 久久影院资源站| 亚洲人成欧美中文字幕| 欧美成人三级视频网站| 日韩在线视频免费观看高清中文| 亚洲精品自产拍| 国产精品美女无圣光视频| 欧美精品中文字幕一区| 精品综合久久久久久97| 欧美激情综合色| 亚洲美女性生活视频| 成人午夜在线观看| 国产精品91在线| 成人国产精品一区| 97在线免费观看视频| 久久99精品视频一区97| 粉嫩老牛aⅴ一区二区三区| 国产aⅴ夜夜欢一区二区三区| 亚洲色图15p| 亚洲伊人久久大香线蕉av| 精品中文字幕在线2019| 亚洲成人亚洲激情| 久久精品精品电影网| 俺去啦;欧美日韩| 亚洲人成电影网站色xx| 亚洲精品国产精品国产自| www.日韩av.com| 久久久久九九九九| 欧美国产日韩一区二区在线观看| 欧美夫妻性生活视频| 亚洲精品小视频| 成人免费观看a| 国产九九精品视频| 成人国产精品av| 欧美色图在线视频| 国模视频一区二区三区| 国产三级精品网站| 国产日韩精品入口| 精品久久久国产精品999| 亚洲久久久久久久久久| 国产欧美精品日韩| 69**夜色精品国产69乱| 国产亚洲视频在线观看| 久久五月天色综合| 欧美日韩综合视频| 九九热精品在线| 亚洲第一男人av| 免费91在线视频| 久久成人精品一区二区三区| 91九色单男在线观看| 久久人人爽亚洲精品天堂| 亚洲精品久久久久中文字幕欢迎你| 国产视频精品久久久| 国产成人jvid在线播放| 国产国产精品人在线视| 国产美女久久精品| 亚洲自拍高清视频网站| 亚洲的天堂在线中文字幕| 亚洲精品久久久一区二区三区| 亚洲永久在线观看| 国产精品久久久久久亚洲调教| 九九九热精品免费视频观看网站| 欧美午夜美女看片| 国产精品自拍小视频| 欧美日韩成人网| 亚洲iv一区二区三区| 久久久亚洲成人| 成人黄色中文字幕| 在线免费观看羞羞视频一区二区| 中文国产成人精品| 国产精品女主播视频| 8090成年在线看片午夜| 亚洲人成绝费网站色www| 国语自产精品视频在线看抢先版图片| 国产成人涩涩涩视频在线观看| 国产主播欧美精品| 91免费国产网站| 亚洲精品视频二区| 中文字幕精品—区二区| 91久久精品国产91性色| 国产成人精品一区二区在线| 久久久噜噜噜久久| 91视频8mav| 欧美国产亚洲精品久久久8v| 97碰碰碰免费色视频| 欧洲一区二区视频| 伊人久久精品视频| 久久久精品一区| 97不卡在线视频| 久久伊人精品一区二区三区| 日韩一二三在线视频播| 一区二区三区天堂av| 国产精品福利在线观看网址| 国产日韩欧美在线视频观看| 精品亚洲永久免费精品| 91国自产精品中文字幕亚洲| 亚洲成人动漫在线播放| 久久久国产影院| 国产成人精品av在线| 最近中文字幕mv在线一区二区三区四区| 亚洲欧美国产一区二区三区| 91美女福利视频高清| 国产精品久久久久久久天堂| 日韩视频―中文字幕| 欧美成人精品不卡视频在线观看| 精品久久久久久亚洲国产300| 亚洲精品v天堂中文字幕| 亚洲第一精品福利| 国产精品美女www爽爽爽视频| 精品亚洲永久免费精品| 国语自产精品视频在线看一大j8| 91精品国产综合久久香蕉最新版| 欧美日本中文字幕| 国产不卡av在线| 久久不射热爱视频精品| 亚洲自拍偷拍色片视频| 亚洲国产97在线精品一区| 国产精品久久久久久久久影视| 永久免费看mv网站入口亚洲| 久久伊人91精品综合网站| 国产精品wwww| 2024亚洲男人天堂| 亚洲最大福利视频网站| 97视频在线观看免费| 日韩欧美中文在线| 国产精品日韩欧美综合| 久久精品国产99国产精品澳门|