[.NET][Design Patterns] 無辜的 Repository Pattern

因為最近分層架構的流行 (拜三隻豬之賜?),愈來愈多人談論起 Repository 的設計,也開始有人認為 Repository 無用,說實在的,Repository 有用於否,存乎一心,當你認為它有用時,隨手寫了它也不會覺得奇怪,但如果一開始就認為它是多餘的,就算人家給你程式產生器,你還是會認為它是多餘的。

...繼續閱讀 »

[.NET][Database] 資料庫中的 NULL 值

在資料表結構 (table schema) 中,每個欄位除了基本的欄位名稱、型態、大小等資料外,有一個有趣的欄位很特別,就是是否允許 NULL,NULL 這個東西對程式設計師來說是又愛又恨,有時會被它搞得嫑嫑的,但是它有時卻又是一個有必要的存在。

...繼續閱讀 »

[C#] 在 Visual Studio 2015 使用 C# 7

昨天在 "C# 7 不能編譯?" 一文的最後,我有提到不是一定要 Visual Studio 2017 才能使用 C# 7,只要 Microsoft.Net.Compilers 可以運作 (.NET 4.5.1 以上),就能使用 C# 7 快樂的寫程式,有朋友回應說 Visual Studio 2015 上使用 C# 7 ,Microsoft.Net.Compilers 已經升級到 2.0,但卻無法編譯... (這個問題要解決有個但書)

...繼續閱讀 »

[Azure] 以 Azure PowerShell 結合虛擬機器擴展集 (Virtual Machine Scale Set) 快速佈建相同環境的虛擬機器

Azure 在以前服務管理模式 (Service Management Mode) 下最大的問題之一就是無法快速佈建大量的虛擬機器,這個問題雖然在管理機制升級到資源管理模式 (Resource Management Mode) 後似乎有改善的狀況,但在 ARM 初期,只是改變了 VM 各資源的組成方式,沒有真正解決快速部署的問題,這個問題一直到 Azure 發表了虛擬機器擴展集 (VMSS) 後才真的得到解決,不過網路上用的幾乎都是使用 Resource Template 的作法,這篇文章要教授如何使用 Azure PowerShell 來做到這件事,而且還是用自訂的作業系統映像,而不是平台本身的。

...繼續閱讀 »

[Visual Studio] 編製 Visual Studio 2017 的離線安裝媒體

Visual Studio 2017 將於 3/8 零時 (台灣時間) 正式發表,在發表的前數個小時,MSDN 訂閱者下載區已經有 Visual Studio 2017 的安裝程式放上去了,不過並沒有發布 ISO 檔案,Visual Studio Community 2017 也是,因此特別說明如何建立一份可離線安裝 (Offline Installation) 的媒體,以利在沒有網路時進行安裝。

...繼續閱讀 »

[Visual Studio] 我的 Visual Studio 20 年

今年是 Visual Studio 的二十歲生日,要說資深的 Visual Studio 愛用者,我應該也可以算一個吧,在我最早開始學習程式開發時,Visual Studio 都還沒出來喔。既然 VS 20 歲了,那我也稍微的寫點文字來慶祝一下 VS 20 週年吧。不過因為我比較擅長實事描寫,要看逢迎拍馬內容的就甭進來了。

...繼續閱讀 »

[.NET] 關於晚期繫結 (Late Binding)

晚期繫結是一種程式語言與作業系統的手法,用意在於避免因為編譯時期的型別檢查機制,導致程式員在編寫程式時,需要處理過多的型別資訊 (Type Information),晚期繫結可以有效的處理在平台之間型別資訊的隔離,讓編譯出來的程式可以在特定的平台之間執行,而不需要被型別資訊綁住,不過也不能過度濫用,除非原生平台就是要用晚期繫結 (例如 JavaScript)。

...繼續閱讀 »

[ASP.NET MVC][Entity Framework] Entity Framework 的 TPH 會額外產生表格?

這是一個很有趣的問題,當初我在編寫 ASP.NET MVC 5 網站開發美學 CH4 (4.6.5) 的實作繼承時,使用的是已有 Database 和 Table Schema 的狀況,沒有注意到 Database Creation 時的狀況,這個問題是由讀者反應,我做了個實驗才發現這個問題,但解決方法也很簡單,在此留下記錄以供其他讀者查閱。

...繼續閱讀 »

[碎碎念] 軟體架構能否實現,真正的問題在成本。

現在網路和分享這麼發達,你可以很容易的搜尋到很多公司或人分享出來的系統架構,舉凡 Stackoverflow、淘寶、百度或是其他公司實作一個解決方案的整體架構,用來當參考架構 (Referential Architecture) 是很棒的藍圖,不過它就只是個 "藍圖",你所不知道的是他們花了多少錢去做,或許一個人用雲端也可以做到,但是並沒有減少它應有的成本,就像你不可能妄想用一台 VM (裡面即使跑得動十萬台 Docker Container) 來服務一億個使用者一樣。

...繼續閱讀 »

[經驗談] 無招勝有招

Design Patterns 或 MVC 都是用來解決架構與設計上的相關問題,它給你的是方向,但真正實作出來的,其實並不是一定要 "依樣畫葫蘆",只要在設計上有滿足 Design Patterns 或 MVC 的精神:職責分明,並且能解決你要解決的問題領域,就夠了。當你學習夠多的時候,自然而然就會有想法,而且自然會植基於 Patterns 之上來思考。Design Patterns 或 MVC 其實只是教你該如何去思考,是概念上的作法,但實作要靠自己實踐,打出一套能夠滿足 Design Patterns 的精神,並能完成問題解決的拳法,才是王道。

...繼續閱讀 »

[ASP.NET] ASP.NET 5 的 Dependency Injection

ASP.NET 5 正式將 Dependency Injection 的功能植入核心內,以提供開發人員與元件開發商更具彈性的 ASP.NET 5 基礎建設,MVC 6 內也利用了 Dependency Injection 的功能重新設計了 Controller 以及 View 的 Service Injection 能力,而未來 Dependency Injection 還有可能會更深入許多的 API,所以還不知道什麼是 Dependency Injection 的人,可要好好學它一下了。

...繼續閱讀 »