CYQ.Data V5 從入門到放棄ORM系列:框架的優勢

来源:http://www.cnblogs.com/cyq1162/archive/2016/07/11/5658997.html
-Advertisement-
Play Games

框架開源後,學習使用的人越來越多了,所以我也更加積極的用代碼回應了。在框架完成了:資料庫讀寫分離功能 和 分散式緩存功能 後:經過三天三夜的不眠不休,終於完成框架第三個重量級的功能:自動化分散式緩存。源代碼已經提交,源碼地址見:終於等到你:CYQ.Data V5系列 (ORM數據層)最新版本開源了 ...


前言:

框架開源後,學習使用的人越來越多了,所以我也更加積極的用代碼回應了。

在框架完成了:資料庫讀寫分離功能 和 分散式緩存功能 後:

經過三天三夜的不眠不休,終於完成框架第三個重量級的功能:自動化分散式緩存。

源代碼已經提交,源碼地址見:終於等到你:CYQ.Data V5系列 (ORM數據層)最新版本開源了

記得很多年前,大概2010年左右吧,CYQ.Data框架進入快速更新版本階段的時候,

那時候的我會經常在一些技術群里有意無意的說起自己的框架,然後群里總有那麼一些自我而自負的人會說:

你的框架有啥優點呢?我為啥要使用你的呢?看你這起的框架破名就不想使用了....

可能是不擅於表達...

可能是不屑於回答...

可能的確是沒啥優點好說...

忽然就有一種蛋蛋的憂傷...

後來就轉變了心態,轉收費,小眾就小眾,彪悍的人生,不需要解釋......

後來的這些年:

創業的經驗,學會了從產品的思維讓框架的使用簡單化。

技術的沉澱,思考了從架構及分散式思維設計框架。

項目的歷程,促使了框架應用場景的豐富化及自動化。

框架的優勢:

如果現在有人問我框架和其它ORM比起來的的優勢,我只能說,能不比麽?因為早已經不在一個Level上了。

不過既然你們誠心誠意的問了,我就大發慈悲的說了,哈:

5年前V4系列版本圖:

不過我並不想把這些功能當成框架的優勢,因為我覺技術沉澱了一定歲月,只要努力,假以時日都可以造出來。

如今的V5系列版本圖:

V5的功能很多,這裡只重點介紹這五點,因為框架能集成這五點的,目前市面上僅此一家做到了,別無分支。

1:多資料庫互通支持:

V4時的多資料庫支持和其它ORM支持多種數庫類似,做到支持多種資料庫,通常只需要完成介面就可以了;

V5做到多資料庫互通,全宇宙僅此一家。

要做到多資料庫互通,需要研究各種資料庫的數據類型差異,函數差異,需要抽象,需要比對,需要策略思維,需要大量的場景收集。

而DBImport就是一款打磨這個功能的最佳場景,前後花了幾年的時間,才磨到現在的流暢穩定階段。

有時候我覺的,DBImport在海外應該很有市場,畢竟全球也就這一款軟體(這麼便宜)能完成在這麼多種資料庫間任意互通。

2:自動化框架編程:

市場上的ORM,都是單個賦值,單個行數據保存的。

而框架的進化史:單個賦值=》單個UI交互=》批量UI交互=》批量數據交互=》自動化交互

相關的介紹見:http://www.cnblogs.com/cyq1162/p/5634414.html

關於開發框架:(ORM做為數據層+整套解決方案)

目前發現的開發框架的二次開發,都停留在用代碼生成器生成一堆代碼的階段......

沒有代碼生成器就很難寫代碼了,項目艱難了,或者開發周期要無限長了......。

我只能說:曾經我也曾歷過,後來發現了有改良的空間。

基於V5的開發框架:ASP.NET Aries,讓你發現優秀的自動化開發框架,根本不需要什麼代碼生成器。

相關的介紹見:http://www.cnblogs.com/cyq1162/p/5487796.html

3:分散式資料庫(讀寫分離)

市場上的ORM都沒提供這個功能:

原因之一:不好實現;

原因之二:數據一致性不知道怎麼解決;

原因之三:覺得數據量大了,公司都有架構師,架構師會坐業務層面解決這個問題。

由於大環境問題,.NET的市場,少有架構師的崗位,也很缺架構師。

而V5框架,不僅完成了此功能,重要的是:

從單資料庫到分散式資料庫的過渡,在代碼層面,只需要配資料庫鏈接,目前沒有其它框架做到。

4:分散式緩存:

市面上有很多很多分散式緩存組件可以用,但唯一的缺點是,你需要引用組件,修改代碼。

但V5的框架,從單機過濾到分散式,只需要配置伺服器鏈接,目前沒有其它框架做到。

5:分散式自動化緩存:

和第4點的差別是,第4點是手動檔,這裡是自動檔。

方便理解的說類似NHibernate的二級緩存之類的。

聽說很多ORM都實現了對實體的緩存,而且會將緩存命率做為一個賣點。

但是現實的場景卻是:ORM+執行SQL,因此框架的二級緩存沒法用,因為在SQL執行端,無法搞定策略失效策略,和數據及時性問題。

V5的不一樣是,因為天生就對SQL語句的支持,所以緩存策略能全局分析,再加上分散式緩存的啟用,能使自動化緩存立即B格成分散式自動化緩存。

綜述如圖:

好吧,優點就介紹到這裡吧,已經全宇宙無敵了,再B下去,憤青要受不了了。

出格要吐槽的一個觀點:

大部分的人都認為從WebForm到MVC是一種進步,其實我反而認為是一種退步。

從組件化的開發模式,退回原始的手工檔模式。

讓WebForm背負沉淪罵聲的,錶面是ViewState和伺服器控制項,實際而又殘酷的真相是:大部分人都寫不好數據層

如果讓所有人回到手寫SqlConnection、SqlCommand、SqlDataReader、SqlDataAdapter時代,MVC也一樣被人叼:又慢又難用......

如果那時候有V5框架,WebForm的春天應該持續很長很長......

現在,webform雖然漸行漸遠,但至少它沒有了慢的理由了,因為有了V5。

總結:

這些年,框架一直伴隨個人的成長,已經從小打小鬧的ORM,進化到大打大鬧的ORM了:

從原始的只要能操作資料庫就好,到產品思維,到自動化思維,到分散式架構思維,下一階段,會是什麼思維呢?

當你項目剛開始,開發人員技術弱的時候,它幫你解決效率和性能問題;

當你項目大了後,沒有架構師的時候,它幫你解決分散式架構問題;

而這一切,你現在都免費可得.....(對了,我博客安裝了打賞插件的,哈)

總而言之,言而總之,總總言之,這麼好的框架,泥瑪,竟然開源了......

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 介紹了sparklyr在Linux下的安裝和使用,包括如何解決遇到的問題,如何部署本地spark和集群spark,並給出了官方示例! ...
  • 迴圈結構 <!--EndFragment--> <!--EndFragment--> 【寫在開頭:】 『 生活中的迴圈: C語言中的迴圈: 迴圈結構是程式中一種很重要的結構。其特點是,在給定的條件成立時,反覆執行某程式段,直到條件不成立為止。 C語言中提供了多種迴圈語句: 1)goto語句和if構成 ...
  • 在Qt中,如何響應動作。這會用到Qt的信號和槽機制。 我的理解:它和Win32程式的消息響應機制差不多吧。 信號,簡單理解就是:當我們點擊一個按鈕時,這個按鈕自身就會產生一個叫作"單擊"的信息,這個信息說明瞭剛剛我們點擊了這一個按鈕。產生的這個信息就相當於自己發射了一個信號,表明一個用戶動作已經發生 ...
  • R語言在Linux下安裝一不小心就容易出錯,本文給出了Ubuntu 16.04LTS版本下的R和RStudio Server的安裝方法,不需要自己下載相關包,方便,快捷! ...
  • python-super 由Python的super()函數想到的 首先看一下super()函數的定義: 返回一個代理對象, 這個對象負責將方法調用分配給第一個參數的一個父類或者同輩的類去完成. parent or sibling class 如何確定? 第一個參數的__mro__屬性決定了搜索的順 ...
  • 程式流程式控制制 順序結構 分支結構:if else,switch case 迴圈結構:while,do while,for if else三種格式 //列印九九乘法表 for(int i = 1;i 費時太多,需要優化,首先在flag底下加break,然後將flag==false改為!flag,再將j ...
  • 關鍵字 定義:被java語言賦予了特殊含義,用作專門用途的字元串。 特點:關鍵字所有字母都小寫。 保留字 現有java版本尚未使用,但以後版本會作為關鍵字使用.byValue,cast,future,inner,outer,var,goto,const 標示符 java對各種 變數 , 方法和類 等 ...
  • Google一下輕鬆找到了答案,大家可以看一下 "Python Wiki" ,很簡單,翻譯如下。 在Python中,當你使用a[key]這種方式從字典中獲取一個值時,若字典中不存在這個此key時就會產生一個KeyError的錯誤,比如: 不過也提供瞭解決辦法:可以使用a.get(key, defau ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...