Asp.net core v1.0

35
ASP.Net Core V1.0
  • Upload

    -
  • Category

    Software

  • view

    138
  • download

    4

Transcript of Asp.net core v1.0

Page 1: Asp.net core v1.0

ASP.Net CoreV1.0

Page 2: Asp.net core v1.0

大綱• Framework的差異• .Net Core指令與範本•檔案結構分析• .Net Core基本概念• ASP.Net MVC 6•資料存取 : EFCore•測試

Page 3: Asp.net core v1.0

Framework在 ASP.Net Core• .Net Core的 Framework支援 :• .Net Core v1.0• .Net Framework 4.5 up

• .Net Core的專案可自行決定要使用的 Framework版本 ,一般來說 ,官方的名詞對映為 :• .Net core v1.0 -> core版本的 Framework• .Net Framework -> Full .Net Framework

Page 4: Asp.net core v1.0

兩種 Framework的差異• .Net Core:• 跨平台 (作業系統平台 ,不是 .Net跨 Java之類的 )• 更快更簡便• 微軟暗示的未來發展項目

• Full .Net Framework:• 完整版的 .Net Framework,最高可支援到最新的 .Net Framework 4.6.2,並且與舊版一致• 需額外在執行應用程式的作業系統上安裝 .Net Framework• 微軟明示的未來不發展項目

Page 5: Asp.net core v1.0

.Net Core•目前支援的平台 :• Windows• Mac OSX• Linux• 未來會支援 FreeBSD和 Alpine

• .Net Core在設計上採用微核心的概念 ;除了最核心的功能之外 ,其它都被包裝成為 Nuget Package•其操作模式類似 NodeJs,對於已有學習過 NodeJs的開發者 ,有著極高親和性•藉由 .Net Native技術將效能提升至原生碼 (Native)境界

Page 6: Asp.net core v1.0

這兩個 Framework的當前狀況• .Net Core• 主要發展項目• 為跨平台做準備 ,天生就具備跨平台 ,只需要在執行環境安裝 .Net Core;而開發人員則是要在自己環境安裝 .Net Core SDK

• Full .Net Framework• 舊版 .Net Framework,套件和生態系最豐富• 需要藉由Mono才能運作在 Unix-Like的環境

Page 7: Asp.net core v1.0

.Net Core的指令指令 說明dotnet new 產生新的基本 .Net專案內容 (僅包含 : project.json, Program.cs和 Nuget.config)dotnet restore 還原專案所使用的 Nuget套件dotnet build 建構專案dotnet publish 產生可發行 .Net專案 (包含所屬的 Runtime)dotnet run 編譯與立即執行 .Net專案 (較適用於 exe型專案 )dotnet repl 啟動互動式模式dotnet pack 將專案的產出封裝成 Nuget套件

Page 8: Asp.net core v1.0

範本• .Net core為了能夠讓非 Visual Studio開發人員能夠輕鬆的開發 ,提供了官方與非官方兩種範本建構模式 :• dotnet new –t [範本型式 ]

• Yeoman(aspnet)

Page 9: Asp.net core v1.0

Yeoman aspnet的 sub-command•在非 Visual Studio的開發環境下 ,若要每個應用程式的程式碼都要自行從空白檔案逐一建構 ,這將大幅降低生產力•為解決此一問題 ,可使用 Yeoman aspnet套件中題供的子命令來解決 ;子命令的格式為 :

yo aspnet:[子指令 ] [檔案名稱 ]

(範例 : 創建 ASP.Net MVC的WebAPI Controller檔案 )yo aspnet:WebApiController ImageApiController•更多指令可參考其官方 Github

Page 10: Asp.net core v1.0

.Net Core專案結構分析方案描述檔 ,可指定編譯位置專案中放置靜態檔案位置 ,Http Request的起始路徑

組態資料放置的檔案專案核心檔案 ,所有操作和控制都在這個檔案應用程式啟始進入點

Page 11: Asp.net core v1.0

global.json•在 projects屬性中 ,可以指定編譯時 ,要對那些路徑進行操作 ,可以指定一個完整路徑• Sdk說明的是當前方案是使用那個版本的 Visual Studio範本工具

Page 12: Asp.net core v1.0

wwwroot• Web專案路徑是整個專案的路徑 ,但是實際上應用程式在執行時 ,Http Request預設會從

wwwroot中存取資源•所有靜態資源檔案都應該要放置在這個資料夾中

Page 13: Asp.net core v1.0

appsettings.json•應用程式所需要的組態資料都寫在這個檔案中•此檔案為 json,它允許巢狀的結構•可使用 Configuration物件存取這個檔案•可在開發時期 ,將資料庫連線字串寫在這個檔案中

Page 14: Asp.net core v1.0

Startup.cs•這裡是整個應用程式的進入點•可以在這邊啟動 /組態所有應用程式所有需要的元件•可以在這邊進行 IoC的註冊

Page 15: Asp.net core v1.0

滄海遺珠 : Program.cs•當以 cmd啟動 .Net Core應用程式時 ,會以此檔案作為應用程式進入點•組態底層應用程式執行時 ,所有需要的控制的組態項目

Page 16: Asp.net core v1.0

滄海遺珠 : launchSettings.json•指示 IDE該如何啟動應用程式•控制執行環境 :• Development• QA• Product

•可設定多組執行模式•可在 Visual Studio的專案 ->屬性中進行設定 , 也可以直接修改此檔案 (效果相同 )

Page 17: Asp.net core v1.0

.Net Core基本概念•有幾個典範移轉的概念 :• 自行設計 Http Request Handling flow• 凡事皆 Middleware(Http Request Pipeline)• 與 Full .Net Framework當前套件有大比例的不相容• 什麼都要靠 Nuget安裝套件和工具• 開始習慣 CommandLine• 不同執行環境分的很清楚 (Development, QA, Product)• 萬物皆可注與被注入• 新式的 Configuration• 提供 Logger 服務• Session新解

Page 18: Asp.net core v1.0

Startup.cs會是你的好朋友•在 Startup類別中的 Configure方法中設計 Http Request Handling

flow:

1

2

3

• Http Request Handling flow的順序和邏輯設計錯誤 ,這會導致應用程式非預期執行• 在 flow中 ,每一個單元都是一個完整的Middleware

Page 19: Asp.net core v1.0

凡事皆Middleware•每個 Http Request被接收到之後 ,會依照開發人員設計的

Http Request Handling flow進行處理• Request/Response都會經過一層層 Middleware• Middleware可以自行決定是否要呼叫下一層 , 或是結束

Page 20: Asp.net core v1.0

不是每個套件都能用•當前有許多好用的套件仍未完全移殖到 .Net Core•目前絕大多數的熱門套件都已經移殖了 ,但是 .Net Core 正式版本與 RC版本又不相容 ,套件作者疲於奔命

(考驗套件作者的耐心 )

Page 21: Asp.net core v1.0

Command Line 萬歲• .Net Core啟發 ( 抄襲 )自 Node.Js, 因此 ,它許多開發的模式都與

Node.Js有著高度的相似• .Net Core可以僅靠指令就能進行許多 CI 流程所需要的操作 :• dotnet restore(套件還原 )• dotnet build(編譯專案 )• dotnet test(執行測試 )• dotnet publish or pack(發佈 or 打包 )

Page 22: Asp.net core v1.0

多環境開發• .Net Core在開發上特別針對不同執行環境有著友善的支援•開發人員僅需要調整 launchSettings.json中的

ASPNETCORE_ENVIRONMENT• 慣例上 ,只要在一些組態檔案的名稱動手腳就能夠套用在不同執行環境上

(例 : appsettings在開發環境下 ,名稱可以是 :appsettings.Development.json)

Page 23: Asp.net core v1.0

.Net Core提供基礎型 IoC 框架•可在 Startup類別中的 ConfigureServices方法中註冊• .Net Core提供三種生命週期 :• Trasient• Scope• Singleton

•預設採用建構子注入•會解決註冊物件之間的相依關係

Page 24: Asp.net core v1.0

Configuration•新式的 Configuration為解決多環境的問題 ,提供了多組態來源以及覆蓋機制

•可使用 Option pattern將物件所需要的組態值注入到物件建構子中

•取巢狀的組態值時 ,可用格式 : Configuration(“[ 第一層 ]:[ 第二層 ]”)

Page 25: Asp.net core v1.0

Logger•在 .Net Core中 ,Logger是內建所提供的服務 ,並且可以注入到各個類別中•只需要在 Startup類別的 Configure方法輸入參數指定 ,而後註冊

指明 ILoggerFactory

Page 26: Asp.net core v1.0

Session• Session與舊版最大的不同在於它的底層已經是抽換成 Cache

(Session要和 Cache一啟被啟用 )•可以在 Startup類別的 ConfigureService方法中啟用 Cache和

Session•要注意 Session的服務啟用一定要早於Mvc• .Net Core提供的 Session 值存取非常陽春 ,主要是 byte[]

(有提供擴充方法 ,但都是一些簡單型別 )(考量之處在於值是否可以被序列化 )

Page 27: Asp.net core v1.0

ASP.Net MVC 6• ASP.Net MVC 6僅能夠在 .Net Core上執行• ASP.Net MVC 6並沒有發生典範轉移

( 誰知道 MVC 7會不會 ! ( -_-) ~ )╯ ╯ ╩╩• MVC 6在開發上與MVC 5差異在於將一些套件進行優化 ,並且僅增加一些東西 :

Controller: POCO Controller, 合併 MVC/WebAPI的父類別View: ViewComponent, TagHelper, View InjectionRoute Attribute: 路由字串範本

Page 28: Asp.net core v1.0

Controller的父類別•不論你使用的是MVC 或是WebApi的 Controller,它們都繼承同一個父類別 : Controller•藉由每個 Action最後回傳的物件型別來區別是回傳 MVC的 View,還是資料 :

Page 29: Asp.net core v1.0

POCO Controller•可應用在WebAPI的 Controller• 查找 Controller的預設方式 :• 本身是類別 ,且不是抽象類別• 類別需為公開 (Public)• 類別後綴字 : Controller 或繼承 Controller類別• 該類別不能有 [NonController]屬性標籤

Page 30: Asp.net core v1.0

TagHelper•開發人員可以自行設計 Html 標籤 (element) 及屬性 (attribute)•具高可重用性 (reusable)•僅需要在 _ViewImports.cshtml檔案上添加 :

Page 31: Asp.net core v1.0

Entity Framework Core• 朝向輕量、可延展和跨平台發展• 保留了 EF中常用和慣用的頂層 API• 目標是就算在手機應用程式也能使用 (舊版太肥無法用在手機 )• 尚未擁有的功能 :

• Lazy Load(效能殺手 ,這個不支援也沒關係 )• Connection Resiliency( 防閃斷 ,這個要快點支援 )• Complexity Type(DDD要這個 )• Spatial Type(空間資料會用到 )• Many-To-Many Relationship( 竟然沒支援 !?)• Inheritance support is not complete( 沒支援就會有很多阻抗匹配的問題 )• Seeding( 竟然沒支援 !?)• GroupBy( 報表 GG了 )• … 等

Page 32: Asp.net core v1.0

EFCore的 In-Memory模式•為了讓整合測試更加順利 ,EFCore支援 In-Memory模式 ;但這個模式並非是完整的關聯式資料庫

Page 33: Asp.net core v1.0

單元測試• .Net Core的單元測試環境框架目前僅支援三種 :• MSTest• Nunit• Xunit

•只有是使用支援的環境框架才能夠使用 dotnet test指令去執行•為了提示 dotnet test測試環境況架 ,需額外在 package.json中指定

testRunner的值•由於絕大多數的Mock 框架都沒有支援 .Net Core, 因此 ,僅能選擇

Moq

Page 34: Asp.net core v1.0

整合測試•安裝套件•由於 .Net Core可以使用WebHostBuilder來建構Web 伺服器 ,可以利用此點讓整合測試變得更加得簡便 :

建構Web 伺服器

Page 35: Asp.net core v1.0

總結與回顧學習 .Net

Core的關鍵 :

Http Request Handling flow

Middleware開發 以指令驅動的開發 IoC