D-18 生命週期 ? request pipeline ? di lifecycle

網頁程式的基礎知識

昨天小光從K大那邊學到了如何生成一個網頁程式專案,並且瞭解了網頁程式的類型,還有網頁程式初始的資料夾結構和初始的兩個檔案的內容,然而在進入開發之前今天要先了解一些網頁程式的基本知識。

網頁程式的基本知識

「既然是學習網頁程式開發,還是要先從基礎開始。」
一大早老K就跟小光這麼說,這時小光正坐到位子上面連電腦都還沒打開,而大頭依舊在需求文件後面埋頭苦幹,不同的是需求文件少了一半。
「前輩那有些甚麼基礎知識需要知道的嗎。」
小光聽到老K的話之後用很認真的表情對老K這麼說。
「表情很好,通常的年輕人都只是學一學怎麼寫程式,都不會想學這個基本功...」
這時大頭抬起頭來偷笑,因為他看到老K對著小光開始一連串的說教,不過沒過多久他還是趕著回去處理自己的需求開發。
「好的,那我們來先學學兩個東西,請求的流水線跟相依注入的生命週期。」
在說完一長串的說教後終於要開始進入正題。

request pipeline

首先要先介紹dotnetcore請求的流水線走的方式,關於這方面請大家先看一下下圖。

MSDN的.Net Core Request Pipeline MSDN的.Net Core Request Pipeline

這是一個請求的流水線,由請求發動後經過RoutingMiddleware等等的處理後再進入到Endpoint處理後會開始回到response的部分。至於Endpoint請看下圖。

MSDN的.Net Core Mvc Endpoint MSDN的.Net Core Mvc Endpoint

上圖則是請求的流水線中Endpoint的部分,其中MVC以例子為例可以再分成Filter的處理以及Model ValiadtionModel Binding的過程後會進到Controler的Action的部分,其處理細節部分可以參考MVC的生命週期
因此在程式開發的部分可以依據需求把部分的邏輯放到Filter內,然後驗證的處理後在到Action內處理商業邏輯。
所以關於請求的流水線到此先告一段落,至於內部細節到時會在後續章節在更進一步說明該階段處理的過程。

di lifecycle

剛剛介紹到Controler的Action的部分,所以這裡也先說明一下之後要介紹的相依性插入的重要觀念di lifecycle,不過這邊介紹的是dotnetcore原生的相依注入的工具的名詞,之後介紹autofac時會介紹之間的對應。
這邊相依注入的生命週期類別如下:

生命週期類別 說明
Transient 每一個元件的實體都是不同的,例如在不同的物件中注入的元件都是不同的
Scoped 同一個請求中的元件會是相同的,但是不同的請求則會是不同的元件
Singleton 整個網頁站台中的實例只會有一個,就算是不同的請求所注入的實例也是一樣的

會提到這個部分是要注意通常的類型都是使用Scoped的這個類型,但如果要注入的元件例如會需要維持一條連線的狀況下會使用Singleton的類型,至於在是用Transient時要注意該元件上是否有狀態的存在,但是使用Transient上會造成資源的浪費,所以設計上會使用Scoped並且注意不要有跟請求狀態有關的變數存在上面來取代Transient

後記

今天老K跟小光介紹dotnet core的基本功,請求的流水線跟相依住注入的生命週期,希望能夠讓讀者們對於網頁程式開發的知識有一些認識。

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *