[ASP.NET MVC] ASP.NET Identity學習筆記 - 原始碼下載、ID型別差異

摘要:[ASP.NET MVC] ASP.NET Identity學習筆記 - 原始碼下載、ID型別差異

[ASP.NET MVC] ASP.NET Identity學習筆記 - 原始碼下載、ID型別差異

原始碼下載

ASP.NET Identity是微軟所貢獻的開源專案,用來提供ASP.NET的驗證、授權等等機制。原始碼的位置如下:

ID型別差異

ASP.NET Identity 2.x 跟 3.x的一個設計變化就是:IUser、IRole在3.x被移除了。這兩個封裝使用者、角色的Entity,在2.x 跟 3.x兩個版本之間主要差異是在於面對ID型別的設計概念:

  • 在2.0的時候,把ID型別都使用泛型的TKey來做設計,這樣可以鬆綁「ID型別」被綁死為特定型別的問題,但是卻增加了系統的複雜度。

    // ASP.NET Identity 2.x
    public class RoleManager<TRole, TKey> : IDisposable
        where TRole : class, IRole<TKey>
        where TKey : IEquatable<TKey>
    {
        public virtual async Task<TRole> FindByIdAsync(TKey roleId){}
    }
    
  • 在3.0的時候,把ID型別使用String來做設計,這樣可以減少系統設計的複雜度,但是變成限定ID型別為String。

    // ASP.NET Identity 3.x
    public class RoleManager<TRole> : IDisposable where TRole : class
    {
        public virtual async Task<TRole> FindByIdAsync(string roleId){}
    }
    

筆者現在設計Framework也都採用3.x的寫法,畢竟使用String作為ID型別,已經可以符合大部分的使用情景。然後遇到資料庫使用int、guid作為ID欄位的型別時,在Access層做對應的Mapping,也可以正常的讓String型別的ID資料進出資料庫。(寫資料庫string轉int、讀資料庫int轉String)

期許自己
能以更簡潔的文字與程式碼,傳達出程式設計背後的精神。
真正做到「以形寫神」的境界。