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

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

POCO Controller 你這么厲害,ASP.NET vNext 知道嗎?

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

POCO Controller 你這么厲害,asp.net vNext 知道嗎?

寫在前面

閱讀目錄:

  • POCO 是什么?

    1. 為什么會有 POJO?

    2. POJO 的意義

    3. POJO 與 PO、VO 的區別

    4. POJO 的擴展

    5. POCO VS DTO

  • Controller 是什么?

  • 關于 POCO Controller

  • POCO Controller 應用

    1. 識別 POCO Controller

    2. 簡單 POCO Controller

    3. IActionResultHelper

    4. IModelMetadataPRovider、ViewDataDictionary

    5. IActionDiscoveryConventions、IControllerDescriptorFactory

  • 后記

  POCO Controller 你這么厲害,ASP.NET vNext 知道嗎?是的,ASP.NET vNext 曉得,因為這就是它的特性之一,嘿嘿。

  在上一篇《分享我對 ASP.NET vNext 的一些感受,也許多年回過頭看 So Easy!》博文中,簡單介紹了 ASP.NET vNext 的一些特性,文中的最后也做了一個簡單的示例,在示例中 HelloWorldController 控制器像以往我們創建 ASP.NET MVC 控制器一樣,需要繼承 Controller 基類,就像人群中某一種特定的人(公務員),Controller 用來標示這一種人是公務員一樣。后來 dudu 在評論中指出:

  ASP.NET vNext 具有POCO Controllers 特性,控制器并不需要繼承Controller,當時試了下確實可以,后來梁兄又指出:

  本人回復:“還沒接觸過 POCO Controller,不做過多評論,后面深入了解下,不過多謝兄臺的指教。:)”,確實對 POCO Controller 并不是很了解,但是讓我對 POCO Controller 充滿了好奇,后來看了下相關知識,發現確實像梁兄所說,簡單的輸出是可以,如果輸出 View,需要自行實現一個 ViewDataDictionary 對象,如果真要做到 POCO 形式結合 View 的話,可能付出的努力要遠大于使用現成的 Controller 繼承?關于這一點,是有些疑問,但我覺得凡事必有存在的價值,只是了解多少而已,POCO Controller 也確實在探索性質階段,關于 POCO Controller 以及相關知識,本篇內容希望起到拋磚引玉的作用。

  以下內容,只是一些個人看法,僅供參考學習,也歡迎討論指教。

POCO 是什么?

POCO(Plain Old C#/CLR Object),意為:純老式的 C#/CLR 對象,也可以稱為簡單的 C#/CLR 對象,POCO 的概念來自于 POJO(Plain Old java Object),POJO 的內在含義是指那些沒有從任何類繼承、也沒有實現任何接口,更沒有被其它框架侵入的 C# 對象。

1、為什么會有 POJO?   

  主要是 Java 的開發者被 EJB 的繁雜搞怕了,大家經過反思,又回歸“純潔老式”的 JavaBean,即有無參構造函數,每個字段都有 getter 和 setter 的 java 類。

2、POJO 的意義

  POJO 讓開發者可專注于業務邏輯和脫離框架的單元測試。除此之外, 由于 POJO 并不須要繼承框架的類或實現其接口,開發者能夠極其靈活地搭建繼承結構和建造應用。

  POJO 的意義就在于它的簡單而靈活性,因為它的簡單和靈活,使得 POJO 能夠任意擴展,從而勝任多個場合,也就讓一個模型貫穿多個層成為現實。先寫一個核心 POJO,然后實現業務邏輯接口和持久化接口,就成了 Domain Model; UI 需要使用時,就實現數據綁定接口,變成 VO(View Object)。

3、POJO 與 PO、VO 的區別

  • POJO 是指簡單 java 對象(Plain Old Java Objects、pure old java object 或者 plain ordinary java object)。
  • PO 是指持久對象(persistant object持久對象)。
  • VO 是指值對象或者 View 對象(Value Object、View Object)。注意,本文的 VO 特指 View Object。

  持久對象實際上必須對應數據庫中的 entity,所以和 POJO 有所區別。比如說 POJO 是由 new 創建,由 GC 回收。但是持久對象是 insert 數據庫創建,由數據庫 delete 刪除的。基本上持久對象生命周期和數據庫密切相關。另外持久對象往往只能存在一個數據庫 Connection 之中,Connnection 關閉以后,持久對象就不存在了,而 POJO 只要不被 GC 回收,總是存在的。

  由于存在諸多差別,因此持久對象 PO(Persistent Object)在代碼上肯定和 POJO 不同,起碼 PO 相對于 POJO 會增加一些用來管理數據庫 entity 狀態的屬性和方法。而 ORM 追求的目標就是要 PO 在使用上盡量和 POJO 一致,對于程序員來說,他們可以把 PO 當做 POJO 來用,而感覺不到 PO 的存在。

4、POJO 的擴展

  POJO 僅包含最簡單的字段屬性,沒有多余的東西,它本質上就是一個普通的 JavaBean。但是在 POJO 的基礎上,能夠擴展出不同的對象。

  • 為 POJO 增加了持久化的方法(Insert、Update、Delete……)之后,POJO 就變成了 PO。
  • 為 POJO 增加了數據綁定功能之后,POJO 就變成了 View Object,即 UI Model。
  • 為 POJO 增加業務邏輯的方法(比如單據審核、轉帳……)之后,POJO 就變成了 Domain Model。
  • POJO 還可以當作 DTO 使用。

注:以上內容來自(http://kb.VEVb.com/page/89750/)

5、POCO VS DTO

  理解了上面關于 POCO 的概念理解,如果對 DDD(領域驅動設計)有所了解,就會發現 POCO 和 DTO 某種意義上很相似,上面關于 POCO 的擴展也有指出:POCO 可以當做 DTO 使用,但也只是某種意義上的,其實有很大的區別,可以參考:http://stackoverflow.com/questions/725348/poco-vs-dto,我理解的 POCO,就像原始人類一樣,它可以演化成現在的各個人種,比如白種人、黑種人和黃種人(PO、UI Model、Domain Model等等)。

  雖然 POCO 為原始人類,但是也包含(不必須)人類的狀態或行為,只是這種狀態或行為是最原始的,比如狩獵為生、吃生食物等等,DTO(Data Transfer Objec)是什么?關于 DTO 的概念可以參考:http://www.49028c.com/xishuai/p/3691787.html,DTO 是領域驅動設計中的概念,只是數據傳輸對象,不包含任何的行為和狀態,我個人覺得和 POCO 不是一個概念里面的東西,無法進行比較。

  如果非要對 DTO 和 POCO 進行區別的話,上面把 POCO 看做為原始人類,那 DTO 可以看做是原始人類的標本,他們倆只是長得比較像,僅此而已。

Controller 是什么?

  在 ASP.NET MVC 中 Controller(控制器)的職責是:獲取 Model 數據并將 Model 傳遞給 View 對象,通知 View 對象顯示,關于 Controller 概念的官方說明:

Controllers:Controllers are the components that handle user interaction, work with the model, and ultimately select a view to render that displays UI. In an MVC application, the view only displays information; the controller handles and responds to user input and interaction. For example, the controller handles query-string values, and passes these values to the model, which in turn queries the database by using the values.

  可以把 Controller 看做是一個產品加工廠,Model 為原材料,View 為銷售平臺,原材料在產品加工廠經過一定的加工處理后,得到成型的產品,然后放在銷售平臺上進行展示銷售,從這個比喻中可以看出 Controller 的作用,就是協調 Model 和 View,那 Routing(路由)是什么?可以看做是政府的宏觀調控,用來決定加工生產什么產品?由哪家加工廠生產?這些工作都是 Routing 進行宏觀調控的。

  為了進一步方便理解 Controller 在 ASP.NET MVC 所起到的作用,我們分析下 ASP.NET MVC 整個的處理流程,首先,用戶通過 Web 瀏覽器向服務器發送一條 Url 請求,這個請求被 ASP.NET MVC 的路由映射系統截獲。路由映射系統按照映射規則,解析出控制器名 ControllerName、ActionName和各個參數 Parameters,然后,找尋 Controllers 目錄下的 ControllerNameController.cs 這個控制器類,默認情況下,系統總是找尋 Controllers 目錄下的“控制器名+ Controller ”這么一個類,然后,找尋這個類下與 ActionName 同名的方法,找到后,將 Parameters 作為參數傳給這個方法,而后 Action 方法開始執行,完成后返回相應視圖,默認情況下,會返回 Views 目錄下與 ControllerName 同名的目錄下的與 ActionName 同名的 View 文件,并且將 ViewData 傳遞到視圖。

  大致畫了下 ASP.NET MVC 的處理流程:

  上圖只是大致演示了下 ASP.NET MVC 的處理流程,更專業、詳細請參照《Pro ASP.NET MVC Framework》作者 Steven Sanderson 的一張完整請求處理流程圖(Request-Handling Pipeline Poster):

  當我們使用 VS2012 創建 MVC3/MVC4 的時候,如果把控制器中繼承的 Controller 基類去掉,結果如下:

 1 namespace MvcApplication1.Controllers 2 { 3     public class HomeController 4     { 5         // 6         // GET: /Home/ 7         public string Index() 8         { 9             return "Hello World";10         }11     }12 }

  HomeController 的 IndexAction 方法中返回一段字符串,路由配置是完全正確的,運行結果會是怎樣?你可能會猜到了,對,就是這樣:

  結合上面關于 ASP.NET MVC 的處理流程,你會明白為什么會報“無法找到資源”的異常?而這些同樣的代碼或配置,在 ASP.NET vNext 中卻可以正常使用,這也就是POCO Controllers 特性的美妙之處。

  請接著往下看。

關于 POCO Controller

  理解了 POCO 和 Controller 概念,理解 POCO Controller 就不會那么困難了,網上關于 POCO Controller 特性的資料實在是少的可憐,MSDN 暫時未找到詳細的說明,如果想要深入的研究,看來只有過段時間把 ASP.NET vNext 搞熟之后了,因為 ASP.NET vNext 支持 POCO Controller 特性,這樣使得代碼更加簡潔,難道好處只是代碼簡潔嗎?其實不然,因為 ASP.NET vNext 開源和支持內置依賴注入(DI),所以你可以研究它的源代碼,在 Controller 中編寫適合自己的控制器,這樣使得你的 vNext 應用程序可擴展性或性能得到進一步的提升,如果可以的話,你甚至編寫屬于自己的一套 Controller,這一切都是從 POCO Controller 演化而來。

  其實如果往長遠一點來想,我個人覺得 POCO Controller 并不簡簡單單是 ASP.NET vNext 的一種特性,它也代表著 ASP.NET vNext 的一種方向,因為跨平臺、開源和依賴注入,使得一切都有可能,雖然 ASP.NET vNext 現在還未正式發布,POCO Controller 也僅僅是一個探路者,但是我覺得這個信號很重要,很重要,也希望大家可以接收得到。

POCO Controller 應用

1,識別 POCO Controller

  言歸正題,因為POCO Controllers 不從 Microsoft.AspNet.Mvc.Controller 基類派生,ASP.NET vNext 如何識別 POCO Controller?關于這個問題在 stackoverflow 中提問:“How Are POCO Controllers Discovered As Controllers?”,回答如下:

There are some conventions that we use to identify a POCO controller:

  • The assembly must reference MVC(必須引用 MVC)
  • The POCO controller class must have the suffix Controller(POCO controller 必須以“Controller”后綴結尾)

  必須引用 MVC 就是在 project.json 中添加如下如下引用:

2,簡單 POCO Controller

  最簡單的 POCO Controller:

 1 // For more information on enabling MVC for empty projects, visit http://go.microsoft.com/f
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
这里只有精品丝袜| 亚洲欧美三级在线| 2020久久国产精品| 亚洲丝袜在线视频| 26uuu国产精品视频| 色青青草原桃花久久综合| 中文字幕亚洲自拍| 亚洲一区二区三区成人在线视频精品| 综合欧美国产视频二区| 亚洲国产成人精品久久久国产成人一区| 欧美猛交免费看| 国产精品久久久久av免费| 亚洲第一区第二区| 午夜精品福利视频| 国产成人一区二区三区| 欧美午夜宅男影院在线观看| 国产日韩中文在线| 亚洲天堂色网站| 精品国产一区二区三区久久狼黑人| 欧美成aaa人片免费看| 91av在线看| 日韩中文字幕第一页| 日韩美女在线播放| 亚洲人在线观看| 91精品国产乱码久久久久久蜜臀| 中文字幕日韩在线播放| 国产mv久久久| 国产噜噜噜噜久久久久久久久| 日韩欧美精品网址| 国产精品免费网站| 久久91超碰青草是什么| 欧美极品少妇全裸体| 国产欧美日韩免费| 日日噜噜噜夜夜爽亚洲精品| 国产成人av在线播放| 欧美视频精品一区| 深夜福利91大全| 国产一区二区三区在线免费观看| 日韩高清有码在线| 亚洲精品一区二区久| 一区二区三欧美| 亚洲人午夜精品免费| 精品一区二区三区电影| 国产精品久久婷婷六月丁香| 成人激情视频在线| 91亚洲国产成人久久精品网站| 国产在线拍揄自揄视频不卡99| 97色伦亚洲国产| 日韩中文第一页| 一区二区成人精品| 26uuu另类亚洲欧美日本老年| 中日韩美女免费视频网站在线观看| 精品色蜜蜜精品视频在线观看| 亚洲摸下面视频| 97在线免费视频| 亚洲最新视频在线| 亚洲成色777777女色窝| 精品视频—区二区三区免费| 日韩电影在线观看永久视频免费网站| 日韩欧美在线视频免费观看| 欧美亚洲一区在线| 久久久久久这里只有精品| 久久精品视频一| 国产欧美精品一区二区三区-老狼| 亚洲视频一区二区三区| 国产精品久久久久77777| 亚洲精品国精品久久99热| 日韩精品在线电影| 日韩av一区在线| 国产日韩中文在线| 日韩精品视频在线观看免费| 日韩欧美一区二区三区久久| 久久久久久噜噜噜久久久精品| 日韩欧美成人网| 日韩中文在线观看| 亚洲欧美中文日韩在线| 国产精品稀缺呦系列在线| 一本色道久久88综合日韩精品| 日本精品视频网站| 国内精品伊人久久| 性色av一区二区三区免费| 欧美精品第一页在线播放| 欧美日韩视频免费播放| 91精品91久久久久久| 国产日韩欧美电影在线观看| 欧美成人激情视频| 欧美成aaa人片免费看| 欧美午夜宅男影院在线观看| 日韩欧美有码在线| 91香蕉嫩草神马影院在线观看| 国产在线精品播放| 中文字幕日韩av综合精品| 国产亚洲精品一区二区| 97视频免费看| 欧美日韩在线观看视频小说| 97香蕉久久夜色精品国产| 亚洲人成在线电影| 中文字幕最新精品| 久久人体大胆视频| 国产亚洲一区精品| 国产成人精品亚洲精品| 免费不卡欧美自拍视频| 色偷偷亚洲男人天堂| 色妞一区二区三区| 狠狠做深爱婷婷久久综合一区| 久久精品人人做人人爽| 色诱女教师一区二区三区| 中文字幕亚洲一区| 亚洲精品福利资源站| 国产精品观看在线亚洲人成网| 国内精品一区二区三区四区| 国产手机视频精品| 国产精品在线看| 欧美视频在线免费| 亚洲欧美综合另类中字| 国产精品久久电影观看| 欧美中文字幕在线观看| 亚洲激情电影中文字幕| 亚洲一区二区三区久久| 国产精品青草久久久久福利99| 国产精品日韩在线观看| 亚洲精品国产欧美| 亚洲欧美国产精品久久久久久久| 国产香蕉一区二区三区在线视频| 欧美国产日韩一区二区三区| 亚洲电影天堂av| 九九热精品视频在线播放| 欧美成人激情图片网| 国产一区二区三区在线| 国产不卡精品视男人的天堂| 亚洲图片欧洲图片av| 中文综合在线观看| 欧美疯狂xxxx大交乱88av| 成人天堂噜噜噜| 精品久久久中文| 久久97久久97精品免视看| 日韩最新中文字幕电影免费看| 亚洲另类xxxx| 午夜精品一区二区三区在线| 欧美怡红院视频一区二区三区| 欧美最猛性xxxxx(亚洲精品)| 国产亚洲美女精品久久久| 亚洲美女久久久| 日韩欧美亚洲综合| 久久久久久久影视| 欧美一区二区三区免费观看| 欧美日韩激情视频| 欧美成人精品不卡视频在线观看| 中文字幕不卡在线视频极品| 欧美日韩一区二区在线| 国产精品久久久久久久久久99| 欧美成年人视频网站欧美| 91欧美视频网站| 97超碰国产精品女人人人爽| 亚洲欧美国产日韩天堂区| 日韩视频欧美视频| 色在人av网站天堂精品| 欧美日韩国产精品一区| 亚洲综合在线中文字幕| 亚洲色图欧美制服丝袜另类第一页| 日韩欧美aaa| 日韩欧美在线视频观看| 亚洲激情国产精品| 成人福利在线观看|