標籤:

細說微軟2018Build大會中.Net Core更新的是啥

細說微軟2018Build大會中.Net Core更新的是啥

2018 年5月8日凌晨,在微軟一年一度的Build大會上,微軟發布了 Azure 雲、AI、物聯網等很多方面的東西。由於.Net Core是可以跨windows、Linux等平台的技術,也是為微服務等架構奠定基礎,因此很多程序員鵬友向我問關於.Net Core變化的詳細解讀,比如「Winform是不是跨平台了」之類的,因此我只就.Net Core部分的變化做我個人的粗淺的解讀。

1、.Net Core 3.0支持WinForm、WPF等桌面UI庫。

.Net Core 3.0將會在2019年發布(一下子就給我們指到一年後了呀)。並不是表明可以在Linux等平台下用.Net進行WinForm、WPF的開發。因為微軟明確說了,這個是「Windows Only」的。

微軟應該也沒有計劃開發跨平台的UI庫,因為畢竟桌面軟體的時代已經過去了,大部分行業都用不到WinForm、WPF等這些桌面開發技術了。

在特殊領域如果要開發跨平台的桌面程序,對於UI性能要求高的地方可以用QT這個目前最成熟、最流行的跨平台UI框架。當然QT是C++寫的,Python下有成熟的PyQT庫,希望能有QT高人來做QT for .net core的binding庫。

如果開發類似QQ桌面版、網易雲音樂桌面版、有道雲筆記桌面版或者一些管理軟體桌面版的話,由於這些軟體對UI性能要求不高,但是對於開發效率、更新升級要求高,那麼可以使用Electron(跨平台的開發工具Visual Studio Code就是用類似技術開發的,連桌面版QQ等很多地方其實都是用類似技術實現的)等技術,當然這是用JavaScript+HTML去寫的,一部分頁面可以放到伺服器端用.net core去寫,這類似於手機中的混合App開發,升級、AB測試、灰度發布希么的都方便很多。

2、.Net core在IIS中運行時候支持託管方式運行

之前.Net Core網站在IIS中運行,其實IIS只是充當一個反向代理的作用,沒有用到IIS的託管支持。新版.Net Core中將支持像普通.Net Framwork網站一樣用託管方式運行。

我個人其實感覺這個特性很沒有卵用(僅是個人觀點),用.net core就是為了Linux。IIS只能跑在Windows下,微軟應該也沒有考慮把IIS移植到Linux的打算。作為「伺服器就要用Linux」這已經成為一個「政zhi正確」的口號,已經不需要討論這個口號是對還是錯了,大環境如此,改變很難。

3、SignalR for .net core即將發布

.net core版的SignalR 已經處於RC版狀態,應該很快就要發布正式版了。

現在的網站或多或少都要用到「伺服器推送」技術(站內消息、彈幕等等),而SignalR 是實現這個非常方便的技術。我一直期待.net core版的SignalR很久了,一旦發布我們也將會在我們自己的如鵬網中第一個使用。

4、Entity Framework Core(簡稱EF Core)支持延遲載入

之前的EFCore只支持通過Include顯示載入導航屬性,不能使用EF中的延遲載入(LazyLoad),新版EFCore將支持延遲載入,這個特性默認關閉,需要手動打開。

我個人也無視這個新的特性,在如鵬網項目以及我講課的時候,我都是強烈不建議使用延遲載入的。因為使用延遲載入一個不小心就會造成性能的問題,要用啥關聯對象應該自己明確的去Include,如果一個程序員都不知道自己要取啥對象,這是很危險的。

Less is more,真希望微軟不要支持延遲載入這個破玩意,否則「EFCore性能差」這樣的屎盆子又會被人扣上頭了!

5、EFCore支持TransactionScope

有了TransactionScope在EFCore中就能更容易的實現嵌套事務了,畢竟複雜的系統中代碼調用層級會很複雜,在對數據完整性要求高的場合,需要一個嵌套事務來確保數據的原子性。

OK,這就是我對微軟2018 Build大會關於.Net Core的新特性的理解,如果有欠缺的地方請各位評論指正。

近期我會推出一個關於.Net互聯網公司架構方面的課程,想了解的鵬友請關注我,推出之後會第一時間通知大家。


推薦閱讀:

如何看待PHP成為.NET的一門編程語言?
如何優雅地產生一組符合正態分布的隨機數?
為什麼大名鼎鼎的Spring在.NET平台上無以為繼?
怎麼看待.net core 2.0發布?
NET Framework 為什麼只是重載了Double和Float浮點數的運算符?

TAG:NETCore | NET | ASPNET |