0%

前文

Index第一個欄位至關重要它會影響資料統計值結果,Index一般建立在查詢條件的欄位

每個Index都擁有自己的B+ tree.

Index使用的資料結構(B+ tree)

B+ tree是一種資料結構這個資料結構被Index拿來使用,關於B+ tree網路上有很多資源可再自行尋找,所以我們來談談為什麼DataBase會使用B+ tree

Wiki講述B+ tree有其中一段

B+ tree是能夠保持資料穩定有序,其插入與修改擁有較穩定的對數時間複雜度。B+ tree元素由下而上插入,通過最大化在每個內部節點內的子節點的數目減少樹的高度,平衡操作不經常發生,而且效率增加了。這種價值得以確立通常需要每個節點在次級儲存中占據完整的磁碟塊或近似的大小。

簡白來說B+ tree有一個特性是他會把資料存在子頁(Leaf Page)中透過一個參考把每個子頁串聯起來,提高穩定度.

B+ tree資料結構如下圖,這個資料結在在範圍查詢時較B tree來的更穩定

Read more »

前文

Index第一個欄位至關重要它會影響資料統計值結果,Index一般建立在查詢條件的欄位

每個Index都擁有自己的B+ tree.

Index使用的資料結構(B+ tree)

B+ tree是一種資料結構這個資料結構被Index拿來使用,關於B+ tree網路上有很多資源可再自行尋找,所以我們來談談為什麼DataBase會使用B+ tree

Wiki講述B+ tree有其中一段

B+ tree是能夠保持資料穩定有序,其插入與修改擁有較穩定的對數時間複雜度。B+ tree元素由下而上插入,通過最大化在每個內部節點內的子節點的數目減少樹的高度,平衡操作不經常發生,而且效率增加了。這種價值得以確立通常需要每個節點在次級儲存中占據完整的磁碟塊或近似的大小。

簡白來說B+ tree有一個特性是他會把資料存在子頁(Leaf Page)中透過一個參考把每個子頁串聯起來,提高穩定度.

B+ tree資料結構如下圖,這個資料結在在範圍查詢時較B tree來的更穩定

Read more »

前言:

假如在系統中null散佈在有許多地方且null有相對應的邏輯或行為.這時候就很適合使用NullObject Pattern來解決,已Null Object取代null邏輯.

Null可能引申出來問題

我們知道在.Net或Java中大部分都是參考類型,而null是參考類型的預設值,我們來看看以下程式.

1
2
Person p = null;
Console.WriteLine(p.Age);

如果物件p指向null且取得p.Age時就會throw NullReferenceException,所以我們在使用一些參考類型物件前都會先判斷此物件是否為null,在執行後續邏輯.

在系統中某一兩個地方這樣判斷還好,但如果一直重複這樣的判斷會造成程式碼不必要的膨脹….

相較於「不帶有null邏輯」的程式碼,面對null邏輯往往需要花費更多心力.

範例程式

下面有段程式碼在calculate方法中會判斷CartModel物件是否為null並執行相對應邏輯

Read more »

前言:

假如在系統中null散佈在有許多地方且null有相對應的邏輯或行為.這時候就很適合使用NullObject Pattern來解決,已Null Object取代null邏輯.

Null可能引申出來問題

我們知道在.Net或Java中大部分都是參考類型,而null是參考類型的預設值,我們來看看以下程式.

1
2
Person p = null;
Console.WriteLine(p.Age);

如果物件p指向null且取得p.Age時就會throw NullReferenceException,所以我們在使用一些參考類型物件前都會先判斷此物件是否為null,在執行後續邏輯.

在系統中某一兩個地方這樣判斷還好,但如果一直重複這樣的判斷會造成程式碼不必要的膨脹….

相較於「不帶有null邏輯」的程式碼,面對null邏輯往往需要花費更多心力.

範例程式

下面有段程式碼在calculate方法中會判斷CartModel物件是否為null並執行相對應邏輯

Read more »

Agenda

完賽感想

這三十天無法對於MVC全部原始碼做詳細介紹,我盡量在這三十篇講述MVC執行過程中重要知識點,閱讀MVC原始碼真不是很簡單事情.

但閱讀完後我對於OOP和如何合理撰寫程式碼一個系統有更深入了解(因為MVC很多地方很好運用OOP概念原則)

希望大家經過閱讀這三十篇文章可以對於IIS託管和Asp.net MVC原理有更深入了解.

  1. Http對於IIS Server請求如何導向Asp.net MVC執行
  2. Asp.net MVC原始碼有基本了解和知道哪幾個重要類別,了解後能依照系統需要替換改寫.
  3. Asp.net MVC用到很多設計技巧,希望大家能更了解設計模式如何運用在實戰中
  4. 可以嘗試閱讀其他知名的開源框架(Dapper,AutoMapper,Autofac,Json.net…..)

如果想要了解Dapper原理讀者我推薦去閱讀,我隊友暐翰系列文章進階學習 ADO.NET、Dapper、Entity Framework 系列寫得很詳細且有影片教學大推!!

感謝這次的夥伴 [IT成長團]

感謝這次可以跟IT成長團的大家一起參與並完成It邦幫忙鐵人活動.

Read more »

Agenda

完賽感想

這三十天無法對於MVC全部原始碼做詳細介紹,我盡量在這三十篇講述MVC執行過程中重要知識點,閱讀MVC原始碼真不是很簡單事情.

但閱讀完後我對於OOP和如何合理撰寫程式碼一個系統有更深入了解(因為MVC很多地方很好運用OOP概念原則)

希望大家經過閱讀這三十篇文章可以對於IIS託管和Asp.net MVC原理有更深入了解.

  1. Http對於IIS Server請求如何導向Asp.net MVC執行
  2. Asp.net MVC原始碼有基本了解和知道哪幾個重要類別,了解後能依照系統需要替換改寫.
  3. Asp.net MVC用到很多設計技巧,希望大家能更了解設計模式如何運用在實戰中
  4. 可以嘗試閱讀其他知名的開源框架(Dapper,AutoMapper,Autofac,Json.net…..)

如果想要了解Dapper原理讀者我推薦去閱讀,我隊友暐翰系列文章進階學習 ADO.NET、Dapper、Entity Framework 系列寫得很詳細且有影片教學大推!!

感謝這次的夥伴 [IT成長團]

感謝這次可以跟IT成長團的大家一起參與並完成It邦幫忙鐵人活動.

Read more »

Agenda

前言

View頁面(razor,aspx…)都是繼承WebViewPage<TModel>頁面,

今天會帶大家寫一個範例完成透過Route判斷多國錢幣符號.

多國路由設定

Route設定上多一個{culture}區塊.如果使用者沒有輸入預設使用英文(en).

1
2
3
4
routes.MapRoute(
name: "Default",
url: "{culture}/{controller}/{action}",
defaults: new { controller = "Home", action = "Index", culture = "en" });

取得貨幣符號

建立一個介面ICurrency裡面有個方法可以取得傳入國家貨幣符號.

Read more »

Agenda

前言

View頁面(razor,aspx…)都是繼承WebViewPage<TModel>頁面,

今天會帶大家寫一個範例完成透過Route判斷多國錢幣符號.

多國路由設定

Route設定上多一個{culture}區塊.如果使用者沒有輸入預設使用英文(en).

1
2
3
4
routes.MapRoute(
name: "Default",
url: "{culture}/{controller}/{action}",
defaults: new { controller = "Home", action = "Index", culture = "en" });

取得貨幣符號

建立一個介面ICurrency裡面有個方法可以取得傳入國家貨幣符號.

Read more »

Agenda

前言

今天要分享對於ActionInvoker進行替換成自己客制化的IActionInvoker

MVC原始碼中有個CreateActionInvoker方法來取得一個IActionInvoker物件,可以看到她會先透過Resolver.GetService從解析器中取得我們的IActionInvoker如果沒有在new一個AsyncControllerActionInvoker物件.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
protected virtual IActionInvoker CreateActionInvoker()
{
IAsyncActionInvokerFactory asyncActionInvokerFactory = Resolver.GetService<IAsyncActionInvokerFactory>();
if (asyncActionInvokerFactory != null)
{
return asyncActionInvokerFactory.CreateInstance();
}
IActionInvokerFactory actionInvokerFactory = Resolver.GetService<IActionInvokerFactory>();
if (actionInvokerFactory != null)
{
return actionInvokerFactory.CreateInstance();
}

// Note that getting a service from the current cache will return the same instance for every request.
return Resolver.GetService<IAsyncActionInvoker>() ??
Resolver.GetService<IActionInvoker>() ??
new AsyncControllerActionInvoker();
}

我們解析器一樣使用Autofac容器來幫我們完成(程式碼會基於昨天Autofac範例往上擴充)

建立自己的IActionInvoker(CustomerActionInvoker)

在取得IActionInvoker首先會透過Resolver解析器來取得,這就提供我們一個可替換接口.

藉由這個機制讓我們可以重寫自己ActionInvoker物件.

Read more »

Agenda

前言

今天要分享對於ActionInvoker進行替換成自己客制化的IActionInvoker

MVC原始碼中有個CreateActionInvoker方法來取得一個IActionInvoker物件,可以看到她會先透過Resolver.GetService從解析器中取得我們的IActionInvoker如果沒有在new一個AsyncControllerActionInvoker物件.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
protected virtual IActionInvoker CreateActionInvoker()
{
IAsyncActionInvokerFactory asyncActionInvokerFactory = Resolver.GetService<IAsyncActionInvokerFactory>();
if (asyncActionInvokerFactory != null)
{
return asyncActionInvokerFactory.CreateInstance();
}
IActionInvokerFactory actionInvokerFactory = Resolver.GetService<IActionInvokerFactory>();
if (actionInvokerFactory != null)
{
return actionInvokerFactory.CreateInstance();
}

// Note that getting a service from the current cache will return the same instance for every request.
return Resolver.GetService<IAsyncActionInvoker>() ??
Resolver.GetService<IActionInvoker>() ??
new AsyncControllerActionInvoker();
}

我們解析器一樣使用Autofac容器來幫我們完成(程式碼會基於昨天Autofac範例往上擴充)

建立自己的IActionInvoker(CustomerActionInvoker)

在取得IActionInvoker首先會透過Resolver解析器來取得,這就提供我們一個可替換接口.

藉由這個機制讓我們可以重寫自己ActionInvoker物件.

Read more »