天天看點

為什麼選擇.NETCore?

為什麼選擇.NETCore?

 為什麼選擇.NETCore?

學習新的開發架構是一項巨大的投資。您需要學習如何在新架構中編寫,建構,測試,部署和維護應用程式。作為開發人員,有許多架構可供選擇,很難知道什麼是最适合的。即使您正在使用.NET開發軟體,.NET Core也不相同,您需要花時間學習使用它的工具和技術。為了了解為什麼.NET Core值得一看,這有助于知道你從哪裡開始。

.NETCore的開源協定

.NET Core從屬于.NET基金會,由微軟進行官方支援。使用最寬松的MIT和Apache 2開源協定,文檔協定遵循CC-BY。這将允許任何人任何組織和企業任意處置,包括使用,複制,修改,合并,發表,分發,再授權,或者銷售。唯一的限制是,軟體中必須包含上述版 權和許可提示,後者協定将會除了為使用者提供版權許可之外,還有專利許可,并且授權是免費,無排他性的(任何個人和企業都能獲得授權)并且永久不可撤銷,相較于oracle對java和mysql的開源協定微軟做出了最大的誠意

如果您是.NET Framework開發人員

.NET Core是為了重新啟動某些Framework元件而為其他人提供跨平台工作的機會。由于.NET Framework主要以托管(C#)代碼為基礎建構,是以這些部分不需要更改代碼即可移至.NET Core。依賴于Windows特定元件的庫必須被移除或重構以使用跨平台替代方案。這同樣适用于您的應用程式。

您的.NET應用程式可以是跨平台的

您現有的.NET Framework應用程式可以在其他作業系統上工作。對于希望擴大類庫的閱聽人平台,或者希望在分布式應用程式的其他領域使用相同代碼的開發人員來說,這是非常好的選擇。即使你想用你亮瞎眼的MacBook上開發.NET,而無需雙啟動到Windows。

并不是所有的架構都被移植到.NET Core,但主要的部分。存在一些API差異。例如,如果您使用了大量的反射,則可能需要重構代碼才能使用Core。有關更多資訊,請看文章末尾的的兩者差異部分。

ASP.NETCore勝過架構ASP.NET

ASP.NET Core和ASP.NET之間的性能差異是幾個數量級。大部分的ASP.NET被傳統的System.Web庫所限制。.NET Framework支援舊版本的ASP.NET項目,而且這個限制限制了ASP.NET的發展。微軟決定重寫整個架構。這意味着打破變化,但結果是值得的。

.NETCore是創新的焦點

向後相容性是一把雙刃劍。這意味着您的應用程式可以繼續得到新版本架構的支援,確定在新版本架構中所做的更改不會破壞現有的應用程式。

所有的努力避免變化都限制了架構的創新。架構的變化需要徹底的理由(通常來自客戶),詳盡的測試以及來自多個層次産品組的準許。

使用.NET Core,團隊可以更容易專注的在.net core上工作。比如核心類庫(如System.Collections)的更改仍然需要與.NET Framework相同的活力,但是ASP.NET Core或Entity Framework Core可以更輕松地進行實質性更改,而不受向後相容性的限制。這允許更大的創新。

.NET Framework作為一個整體産品釋出,但是.NETCore被分解成多個部分。現在開發人員可以選擇使用哪個版本的庫。隻要它在.NET标準庫之外,.NET Core團隊就可以用較少的難度進行創新。這就是為什麼在将來你隻能看到錯誤修複的架構; .net core将獲得所有新功能。

釋出周期更快

如果您曾在架構中遇到錯誤,并将其報告給Microsoft,則您将知道釋出修複需要多長時間。這個架構有很長的釋出周期,通常至少要測量一年,而且在這些周期中還有很小的視窗用于特性工作。每個代碼更改都可能會導緻架構中其他位置出現意外的問題。為了給每個團隊足夠的時間來測試架構,有很多時候代碼更改是受限制的或者嚴格審查的。如果您在.NET中發現了一個錯誤,最好找到一個解決方法,而不是等待更新(這也是.NETCore開源帶來的好處,您不需要完全依賴微軟支援才能解決問題,這對于大型企業更是有利,可以利用技術資源來對.NETCore進行本企業定制化,成為.NETCore的分支來運作)。

.NET Core遵循更快的釋出步調。開發人員可以使用夜間建構來盡早測試。不屬于.NET标準庫的庫可以按自己的步調釋出。因為所有東西都是開源的,如果微軟沒有足夠快的響應,任何開發者都可以提出修補。如果解決方法不被接受,讨論就會公開進行,所有人都可以看到為什麼做出這個決定

如果你是.NET新手

在Windows平台上,.NET架構沒有太多的競争。微軟可以對從作業系統核心層到進階.NET庫的所有内容進行更改。通過将.NET引入其他平台,競争環境發生了變化。.NET現在必須與其他所有的開發架構競争。

C#是一個了不起的語言

.NET的旗艦語言C#具有許多獨特的功能,例如語言內建查詢和異步構造,這使得它強大且易于使用。相較于保守的java(我們也看到Oracle旗下的老牌java已經已經越來越難推出新特性,這是曆史包袱所導緻,在将來子產品化的開發中很難進行更新維護)C#也在不斷創新。C#團隊公開設計語言,因為他們希望任何人提出建議或參與讨論。編譯器(Roslyn)完全是子產品化和可擴充的。

ASP.NET Core性能與頂級Web平台相當

如果您正在編寫Web應用程式或服務,那麼ASP.NET Core是一個很好的搭建平台。它具有出色的性能和低記憶體占用。許多功能可以使您的應用程式更容易開發和維護。

.NET Core不是從頭開始的

.NET在2000年以前就已經出現了。架構代碼在過去幾年中已經得到了鞏固,開發人員也從中受益。已經被移植到Core的大部分Framework代碼都沒有改變。這使.NET Core在建構應用程式的可靠架構方面領先一步。.NET Core也完全由Microsoft支援還有越來越活躍的開源社群例如紅帽組織。這降低了為您的應用程式使用Core的風險。

什麼是.NETCore?

為了了解.NET Core,它有助于了解.NET Framework。微軟在21世紀初釋出了.NET Framework。.NET Framework是一個僅限于Windows的開發架構,它在最底層提供了記憶體管理,安全性,異常處理和許多其他功能。.NET架構附帶一大堆庫,可執行從XML解析到HTTP請求的各種功能。它還支援幾種語言,并将它們編譯成相同的通用中間語言; 任何語言都可以使用任何其他語言建構的庫。這些關鍵概念也出現在.NET Core中。

2016年,微軟收購了Xamarin并釋出了.NET Core 1.0。之前Xamarin已經移植了.NET架構的大部分内容來運作在基于Linux / Unix的作業系統上。一些代碼可以在.NET Framework,Xamarin和新的.NET Core之間共享,但編譯後的二進制檔案不能。.NET Core的一部分努力是建立一個标準化的平台,允許所有.NET實作共享相同的庫。

                          

為什麼選擇.NETCore?

圖1 .NET架構,.NET Core和Xamarin都共享一個稱為.NET标準庫的标準化平台

以前的Xamarin和.NET Framework之間是無法共享二進制檔案的。随着.NET标準庫和通用基礎架構的推出,這兩個架構現在成為統一的.NET生态系統的一部分。

什麼是.NETCore?在上圖中,似乎.NET Core是另一個包含UWP(通用Windows平台)和ASP.NET Core的架構。為了使.NET Core成為現實,建立了.NET标準庫和通用基礎架構。

.NETCore的關鍵功能

.NET Core借鑒了.NET Framework的最佳實踐,并将軟體工程的最新進展結合在一起。這些是.NET Core的一些顯着特征。

擴大您類庫的覆寫面

使用.NET Core,您可以使用.NET标準庫編寫應用程式或庫。

然後它可以在許多平台上共享。

為什麼選擇.NETCore?

圖2 .NETCore開發

同一個庫可以在背景服務“本地”或雲中運作,也可以在手機,平闆電腦或桌面上運作的用戶端應用程式中運作。與其為iOS,Android和Windows建構單獨的應用程式,您可以建構一個适用于所有平台的應用程式。.NET Core是小型和完美的容器,可以輕松擴充并縮短開發時間。

.NET Core和.NET Standard Library建立了一個通用平台。過去,當新版本的作業系統或新裝置出現時,開發人員有責任重新建構新平台的應用程式或庫,并分發更新。使用.NET Core,不需要重建和重新配置設定。隻要新的平台支援你所有的依賴庫,它就支援你的應用程式。

在任何平台上簡單部署

Microsoft産品往往具有複雜的安裝過程。COM元件,系統資料庫項,特殊檔案夾,GAC - 都是為了利用Windows的特性而設計的。.NET架構依賴于這些構造,這使得它不适合其他作業系統。

在釋出依賴于.NET Framework的應用程式時,安裝程 序必須足夠聰明才能檢測是否安裝了錯誤的.NET Framework版本,并為使用者提供正确的方法。大多數現代Windows版本都包含.NET Framework。這使得某些應用程式更容易安裝,但是如果應用程式使用預設情況下未安裝的功能(如ASP.NET與IIS或WCF元件的內建),則可能會導緻複雜的問題。

另一個複雜的問題來自更新檔。包括錯誤修複或安全更新的修補程式可以通過Windows更新或通過Microsoft下載下傳中心分發給客戶。您測試應用程式的.NET Framework可能與客戶使用的更新檔程式不同。當您假定.NET Framework對于所有客戶都是一樣的時候,通常很難确定在應用程式中導緻奇怪行為的原因。

.NET Core的子產品化設計意味着您隻包含所需的依賴關系。所有這些依賴關系與您的應用程式進入相同的檔案夾。部署應用程式與複制檔案夾一樣簡單。這種方法的另一個優點是可以有多個版本并行運作。這個政策對于使所有平台的部署體驗保持一緻至關重要。

雲和容器

在雲系統中,用更少的硬體為更高密度的使用者提供服務是非常重要的。應用程式的占位面積越小,密度越高。虛拟機已經在雲端普遍存在多年,但是它們有幾個問題:

  • 大小 - 一個典型的虛拟機檔案是千兆位元組,如果不是幾十千兆位元組。這使得它們跨網絡傳輸非常耗時,并且對磁盤空間有很大的要求。
  • 啟動時間 - 啟動虛拟機意味着啟動作業系統。對于Windows來說,這是一個挑戰,因為啟動新機器需要花費時間。這可以使處理突發交通困難。
  • 記憶體 - 虛拟機需要将整個作業系統與應用程式一起加載到記憶體中。這意味着很多主機的記憶體被浪費了。
  • 不一緻性 - 相同的虛拟機可以複制到多個主機,主機必須提供相同的虛拟化硬體,這可能依賴于實體硬體。無法保證虛拟機在任何給定的主機上運作相同的操作。

容器通過虛拟化作業系統來解決虛拟機的問題。容器隻包含應用程式及其依賴項。檔案大小要小很多倍,啟動時間以秒為機關,隻有應用程式加載到記憶體中,容器保證在任何主機上工作。

内置于Windows的.NET Framework不能在容器上運作。鑒于容器的明顯優勢,.NET Core的設計決定之一就是使其成為子產品化。這意味着你的.NETCore應用程式可以被“釋出”,使得它和它的所有依賴關系在一個地方,這很容易放入容器。

ASP.NET性能

如果您不熟悉ASP.NET,則是.NET Framework中内置的Web應用程式平台。ASP.NET被許多有影響力的組織所使用,包括Stack Overflow還有絕大多數的可靠性很高的金融證券行業領域。ASP.NET是2002年釋出的第一個.NET Framework版本,并不斷發展。盡管ASP.NET取得了成功,但在ASP.NET團隊中卻感覺到他們正在失去開發人員,因為ASP.NET的性能沒有競争力,隻能在Windows平台上運作。

一家名為TechEmpower的公司每隔幾個月就會運作一次Web應用程式平台的基準測試,并提供一個分為幾類的排名。基準測試在Linux上運作,僅包含Windows平台。對于ASP.NET團隊來說,這很麻煩。許多平台都用于編寫跨平台的Web應用程式,并且其性能資料令人印象深刻。此外,一些Java架構釋出了天文數字,例如每秒570萬個明文請求,或者490萬個。

為什麼選擇.NETCore?

圖3  TechEmpower基準,第12輪

在TechEmpower基準測試的第十一輪中,Mono平台上的ASP.NET MVC被納入測試。結果不好。Mono上的ASP.NET每秒産生一個微小的2000個明文請求。Mono不是由Microsoft建立的,它不會像普通的.NET Framework那樣得到相同數量的性能調整。為了獲得更公平的比較,ASP.NET團隊決定在與TechEmpower相同的硬體上運作.NET 4.6的基準測試。結果是每秒約50,000個請求。仍然沒有接近NodeJS(每秒320,000個請求),或TechEmpower清單上的其他任何頂級架構。

可憐的低分并不意外。如前所述,ASP.NET知道改變現狀隻能通過重寫整個架構來清除障礙。這正是發生的事情。

ASP.NET團隊着手建構ASP.NET Core,幾個月後,該團隊慶祝asp.net core每秒超過100萬個請求。最新asp.netcore與node.js的性能對比更是讓asp.net core的性能優勢繼續擴大

ASP.NET Core   VS     Node.js

為什麼選擇.NETCore?

上圖中可看出asp.net core作為複雜web開發的性能已經相較于之前有質的提高,  ASP.NET Core  VS  node.js

.NET Core   VS     Java

為什麼選擇.NETCore?

ASP.NET Core表明了微軟思維的轉變。微軟意識到它必須具有競争力才能赢得開發者。它還必須在Windows以外的平台上競争。這是建立.NET Core的原動力。

開源

現代軟體開發人員并不滿足于尋求功能。當已經有一個滿足他們需求的開源項目的時候,尤其如此。當大公司熱衷于開源軟體時,即使是最忠實的微軟開發者也會轉向其他架構和庫,以便在預算内按時完成自己的項目。如果微軟關心“開發人員,他們必須做出改變。

公開.NET Framework的源代碼是第一步。.NET Framework源代碼已經在referencesource.microsoft.com 和GitHub上公開了好幾年了。

為什麼選擇.NETCore?

圖4 .NET Framework參考源

從單獨的開源代碼到接受外來的貢獻是完全不同的。.NET Core開發人員不僅希望獲得外部貢獻,還希望将社群納入設計和開發。這導緻了更多的透明度。ASP.NET Core團隊每周都會在http://live.asp.net上舉行一次社群直播會議。.NET Core的代碼從一開始就在GitHub上公開,任何人都可以提出請求。社群成員可以在GitHub中建立錯誤和功能。.NET Core已經标志着微軟在開源方面的重大轉變。

與.NET Framework的差異

.NET Core不僅是Linux和Mac的.NET Framework。微軟并沒有移植所有的.NET Framework,對于ASP.NET客戶來說,ASP.NET團隊是.NET Core的驅動因素。MVC,Web API和SignalR都可以在.NET Core中找到,或者在路線圖上。

架構功能沒有移植到.NETCore

我給這個清單提供了可以改變的知識。某些功能不适用于非Windows平台,其他某些功能也将不會由Microsoft在将來推出,因為有更好的替換或功能在某些方面有問題(不安全,難以維護等 )。

  • WPF / XAML - Windows Presentation Foundation僅适用于使用者界面。.NET标準庫不包括使用者界面庫,.NET Core不會提供跨平台的UI架構。這意味着像Windows窗體和系統的東西。繪圖不會移植到.NET Core。
  • 事務 - 這個庫使建立分布式事務變得容易。它依賴于特定于Windows的元件,使其不易移植到.NET Core。
  • AppDomains - 這些對于隔離程式集來說是非常有用的,而且不會終止程序,這對于允許插件的應用程式來說非常有用。它們依賴于某些Windows特定的構造,這些構造在其他作業系統上不起作用。
  • .NET遠端處理 - 遠端對象已被REST服務成功。
  • ASMX - 編寫已被Web API取代的Web服務的舊方法。
  • Linq to SQL - 由實體架構取代。
  • WCF服務 - Windows Communication Foundation用戶端功能在.NET Core中可用,但不能建立服務。
  • WF - Windows Workflow Foundation依賴于XAML,WCF服務以及其他.NET Framework特性之間的事務。

.NET Framework開發人員的微妙變化

有經驗的.NET Framework開發人員可能會在.NET Core中遇到一些驚喜。編寫新的代碼應該是相對直接的,因為你不太可能使用像

HashTable

or 這樣的舊的結構

ArrayList

。Visual Studio的Intellisense也指出.NET Core是否支援類型,方法,屬性等。

為什麼選擇.NETCore?

圖5 Visual Studio IntelliSense訓示.NET Core中是否有類或成員可用

。NET可移植性分析器

如果您試圖将現有的.NET應用程式轉換為.NET Core,那麼最好的地方就是.NET可移植性分析器。它既可以作為指令行應用程式,也可以作為Visual Studio插件使用。有許多.NET平台可供選擇:

為什麼選擇.NETCore?

圖6 .NET可移植性分析器中提供的目标平台

盡可能使用此工具建立一個詳細的報告,提供有用的建議:

為什麼選擇.NETCore?

圖7。.NET可移植性分析器報告

反射

.NET Core中的反射工作方式與.NET Framework中的不同。最明顯的差別是,

Type類

上正常的許多操作不再存在。有些人已經被調到一個新的

TypeInfo類

。其他操作在.NET标準庫中不可用,并且需要額外的依賴性。

  .NET Framework實作反射

.NET Framework實作反射

PropertyInfo targetProperty = null;
foreach (var property in
         owningElement.GetType().GetProperties())
{
    if (property.Name == this.Name
        && property.PropertyType.IsGenericType)
    {      

The .NET Core 實作反射.

PropertyInfo targetProperty = null;
foreach (var property in
owningElement.GetType().GetProperties()) 
{
if (property.Name == this.Name && property.PropertyType
.GetTypeInfo().IsGenericType)           
{      

❶需要依賴于System.Reflection.TypeExtensions

❷ 許多類型操作移到了TypeInfo

概要

軟體開發行業正在不斷發展。從語言到架構,工具到方法論,一切都受到挑戰和改進。.NET架構已經到了不得不做出改變的時候,以跟上競争對手。.NETCore是.NET演進過程中必不可少的一步。它将最好的.NET Framework與現代軟體開發中使用的實踐相結合。諸如可移植性,簡單部署,高性能,開放源代碼和強大支援等特性使其值得一試。

以上資料是.NETCore2.0資料,最新穩定版本是2.1.300,性能在2.0基礎上又大幅提升,具體詳情請Google

Why Choose .NET Core?

推薦免費高品質微服務書籍:.NET微服務 容器化.NET應用架構指南

.NET Core介紹 (PDF)  https://files.cnblogs.com/files/xiaoliangge/NETCore-chaunce.pdf(可用于公司.netcore分享ppt使用)

為什麼選擇.NETCore?
為什麼選擇.NETCore?

作者:Chaunce

來源:http://www.cnblogs.com/xiaoliangge/

GitHub:https://github.com/liuyl1992

個人位址:http://blog.chaunce.top

公衆号請搜:架構師進階俱樂部 SmartLife_com

為什麼選擇.NETCore?

聲明:原創部落格請在轉載時保留原文連結或者在文章開頭加上本人部落格位址,如發現錯誤,歡迎批評指正。凡是轉載于本人的文章,不能設定打賞功能等盈利行為

繼續閱讀