Skip to main content

Posts

Showing posts from April, 2017

[探索 3 分鐘] ASP.NET MVC 演進歷史

MVC 模式(Model–view–controller)是軟體工程中的一種軟體架構模式,把軟體系統分為三個基本部分:模型(Model)、視圖(View)和控制器(Controller)。 wiki 開宗明義就是這麼說, 且在 1978 年就被提出, 至今已經將近 40 年。說穿了就是一種關注點分離設計概念, 後來各個語言都基於這個概念推出自己的 MVC 架構。ASP.NET MVC 算是發展較晚, 但發展至今大家已經離不開他了。 ASP.NET MVC 的發展歷史, 各版本有滿多差異, 接手 MVC 專案時要特別注意 MVC 版本, 免得一直拿新版本功能硬幹, 或 Install-Package UpgradeMvc3ToMvc4 指令不小心下去, 結果專案死透了。 ASP.NET ASP.NET MVC 的起源其實是 ASP.NET 技術框架,  ASP.NET  技術開發歷史如下 : 1996 : Active Server Pages (ASP) 2002 : ASP.NET 2008 : ASP.NET MVC 2010 :  ASP.NET Web Pages  (Razor)  2012 :  ASP.NET Web API ,  SignalR  ( MVC 4 ,  MVC5 ) 2014 : ASP.NET 5  (ASP.NET Core, Open Source) ASP.NET is a free web framework for building great websites and web applications using HTML, CSS, and JavaScript. You can also create Web APIs and use real-time technologies like Web Sockets. ASP.NET MVC 時間過得真快, 微軟 ASP.NET MVC 框架已經發展快 10 年了 (2007 ~ 2017截稿), 近年來更是每年更新一版, 你在用的是哪一版呢 ? 我自己最多也曾經在服務的公司使用 ASP.NET MVC 5 + Web API 2, 搭配 .NET Framework 4.5, IIS 7.5, SQL Server 2008

[探索 5 分鐘] boxing 與 unboxing 重點整理與程式範例

博大精深的設計 !  MSDN  官方文件寫得很清楚, 這兩個詞兒都算動詞, 是把型別與  System.Object  超基底型別互相轉型的過程, 但不知道各位有沒有跟我有相同的困擾, 以 int 與 object 兩個型別為例, 到底 int to object是 boxing, 還是 object to int 是 boxing ? 用猜的怎麼猜怎麼錯。 這邊提供一個小小記憶法, 就是..., 圖像記憶法 ! 總之裝箱的過程, 就是 boxing, 就是放到一個隱含的型別中: System.Object, 那你是不是就看不到了呢 ? 你應該就看不到了, 因為他就是被一個 box 裝起來了, 你看不到他, 你看不到他, 你看不到他。 中文翻譯如其名 boxing 就是裝箱, unboxing 就是拆箱; 然而他的用途或特色呢 ? 網路上有很多資料, 喜歡哪一種講法就看個人, 我的歸納重點。 易於指標操作  多型的操作彈性 注意副效應 (性能消耗與轉型錯誤) 易於指標操作 來看看這個很像 C++ 的指標操作代碼。 long num1; long num2 = num1; long* ptr1 = &num1; //address-of operator & 這個例子剛好是 long, 但他可以是任意型別。num1 是長整數占用 8 bytes 記憶體; 而 ptr1 是個指標變數占用 4 bytes 記憶體。也就是說, 不管資料型別為何或 size 多大, 他被 assign 給某個變數 (num2) 或指標變數 (ptr1) 後, 這個變數本身所需要占據的記憶體就剩 4 bytes 的指標位址 (而資料儲存的地方是另外一回事), 後續拷貝變數, 傳遞變數, 成本都低的非常多 (想像當資料 size 很大時)。是不是稍微可以了解為何會有 reference type 了呢 ? 如 string, object。 多型的操作彈性 boxing 是轉為 System.Object 型別的物件, 是所有類別的母類別, 在進行資料結構設計就出現一種多型的技巧, 如 List<object> 的 Item 與 Dictionary<string, object> 的 Item.Va

[探索 5 分鐘] 傳值 (pass by value) 與傳址 (pass by reference) 基礎觀念

 我們知道傳遞參數或 assign 變數時, 要注意是 pass by value, 還是 pass by reference。有時候, 語言切來切去或一時不察, 還是會犯下低級錯誤, 花費很多 debug 時間。 首先, 要知道哪一種傳遞方法之前, 必須先識別物件本身是屬於 reference type 還是 value type。比如 C# 語言, MSDN  這麼說。 與您熟悉的某些程式設計語言不同的是,C# 有兩種資料型別:實值和參考。如果應用程式的效能很重要,或是如果您對 C# 如何管理資料和記憶體有興趣,了解兩者之間的差別就很重要。當變數是以基本內建資料型別其中之一,或使用者定義的結構進行宣告時,此變數便是實值型別 (Value Type)。有一個例外是 String 資料型別,它屬於參考型別。 那基本內建資料型別有哪些呢 ? wiki  的分類整理。 Classic basic primitive types may include: ● Character (character, char); ● Integer (integer, int, short, long, byte) with a variety of precisions; ● Floating-point number (float, double, real, double precision); ● Fixed-point number (fixed) with a variety of precisions and a programmer-selected scale. ● Boolean, logical values true and false. ● Reference (also called a pointer or handle), a small value referring to another object's address in memory, possibly a much larger one. 注意用 may include 就是無法 100% 包括所有語言的原生型別, 畢竟還是有語言相關性的。常見的 value type 如 byte, sbyte, short, int, long, ushort, u