發表文章

目前顯示的是 12月, 2019的文章

決戰 OOAD 系列課程 所有影片,今天正式殺青了

圖片
圖(一)、決戰 OOAD 線上課程 LOGO 這個課程我從今年的八月開始錄影,但是因為家中有小孩剛滿一歲,因此假日也得要分擔家務也培養親子關係,因此在時間很有限的情況下,我已經只有六日的時間了,扣除掉陪孩子的時間後,所省也沒幾個小時,所以這一搞就搞了四個多月才完成。 但決戰 OOAD 課程的章節也非常的多,從理論說明、到為什麼使用 Modeling 來開發系統?OOA/OOD 的介紹、到 UML 的實際的應用面也是使用一個實際的線上房貸申請的需求來當作例子,課程是原汁原味地將先前我所開過的實體課程程,除了完整呈現一遍之外,事實上、我還加了一些先前 講過的跨平台開發的 Clean Architecture 的例子,並在架構設計的部分與 UML 的設計產生關連,最後實際的撰寫程式碼,當然、程式碼與 Modeling 設計產生關聯也是本課程的重頭戲之一。 曾經朋友有有再問,為什麼你這麼熱衷於 OOAD?其實,有一部份原因是,我覺得近7-8年有一種很弔詭的現象,我們知道軟體開發的世界進步非常的快速,方法論的不斷的演進,瀑布式開始、敏捷、看板,近來也盛行 TDD 開發方法、或是 DDD 領域驅動設計、但是 TDD 或者是 DDD 我會覺得比較像是『(外功/招式)』,而這些招式比較需要足夠的軟體開發基本功,華麗的招式往往更需要更強的基本功來支撐,就像我常常在說的,如果你是用 OO 的語言在開發系統(像是 Java/TypeScript/C# 等等),那麼你在(分析/設計) 的時候一定得是採行物件導向的分析設計方法,就是俗稱的用物件的角度來看事情,那就是本課程裡所謂的 OOA/OOD,所以如果 TDD 或 DDD 外功、那 OOA/OOD 就是蹲馬步了,試想,如果你連蹲馬步都蹲不好,這些招式怎麼可能練的扎實與真正了解其中奧妙之處呢?還有可能會內傷呢!這就像天龍八部裡面,一群武林人士進入到靈鷲宮看到牆壁上那高深的武功就狂練、基本功與內功不足的不久就立刻走火入魔是一樣的道理。 圖(二)、武學中往往招式最吸引人 圖(三)、但『基本功』才是最重要的 這次,我開立這樣的課程也是希望帶給大家從入門到進階的 OOAD 系列完整的從無到有的系統分析設計再加上真的實作。 說真的,我還真不敢相信我將它全部錄完了!這個課程一共有 38支影片: 就像上面圖片裡現在所呈現...

使用多目標 TargetFrameworks 來讓 net72 可參考 .netstandard2.1 通過編譯並可使用

圖片
前言 先前,在 .NET Standard 2.1 推出之時,微軟官方就已經宣告不支援 .NET Framework 4.8,且 .NET Framework 4.8 也被宣告為 Windows 上的最後一版的 .NET Framework,未來有任何新增功能(也許為了微服務/非同步/OSS…)等一些更進階的場景、也許透過語言支援、也許透過 Runtime Compiler 來支援,但是這些功能未來只會在 .NET Core 3.x 以後的版本中出現,也不會再像以前一樣,更新回 .NET Framework 裡。 這對開發人員來說,也許是壞消息、但也許是好消息。 在.NET Standard 2.1 中大約增加大約 3k 的 API,簡而言之、.NET Standard 2.1 增加了許多是 .NET Core 2.0 開始支援的 API,像是 ValueTask<T>、Span<T>、還包括許多在 .NET Core 2.1 & Xamarin & Unity 才支援的型別。 更詳細的資訊可直接參考 terrajobst 的 Github: https://github.com/dotnet/standard/blob/master/docs/versions/netstandard2.1.md 也就是說,從 .NET Standard 2.1 開始,只支援在 .NET Core 3.0/Mono 5.4/Xamarin.iOS 12.16 … 等 以上的版本中使用,然而 .NET Framework 4.8 不再表列之中… 沒錯!就是不再表列之中,就是沒有! 圖(一)、All .NET Standard Versions 圖片來自: https://github.com/dotnet/standard/blob/master/docs/versions.md 實際的測試下,如果你開一個 net472 的 Console 專案來參考 .NET Standard 2.1 的類別庫時,你連編譯都無法編譯。 圖(二)、根本無法編譯 有一種解決方案就是使用多目標編譯方式來通過編譯。 多目標編譯使用方式可參考下方: <Project Sdk="Microsoft.NET.Sdk">    <Prope...