關(guān)于我們
書單推薦
新書推薦
|
SOD框架“企業(yè)級”應(yīng)用數(shù)據(jù)架構(gòu)實(shí)戰(zhàn) 全書主要從系統(tǒng)架構(gòu)師的角度,講述應(yīng)用系統(tǒng)中所有有關(guān)數(shù)據(jù)問題的解決方案,這些方案小到一個(gè)具體的API使用,大到整個(gè)系統(tǒng)架構(gòu)的設(shè)計(jì),從解決方案的合理性、易用性和擴(kuò)展性來逐步設(shè)計(jì)擴(kuò)展,一步一步分析當(dāng)前遇到的問題,給出這類問題的最佳實(shí)踐的解決方案。通過對這個(gè)問題的分析解決過程,引導(dǎo)普通的開發(fā)人員擺脫煩瑣的、枯燥無聊的數(shù)據(jù)增刪改查工作,完成從菜鳥到專家的蛻變過程。 本書適合于有一定編程開發(fā)基礎(chǔ)知識的程序員進(jìn)一步學(xué)習(xí)掌握與數(shù)據(jù)應(yīng)用相關(guān)的開發(fā)知識,更適合于有一定開發(fā)經(jīng)驗(yàn)的程序員鞏固提高數(shù)據(jù)開發(fā)方面的理論知識,也適合于打算進(jìn)階系統(tǒng)架構(gòu)師的朋友學(xué)習(xí)設(shè)計(jì)和使用系統(tǒng)架構(gòu)。 本書適合于有一定編程開發(fā)基礎(chǔ)知識的程序員進(jìn)一步學(xué)習(xí)掌握與數(shù)據(jù)應(yīng)用相關(guān)的開發(fā)知識,更適合于有一定開發(fā)經(jīng)驗(yàn)的程序員鞏固提高數(shù)據(jù)開發(fā)方面的理論知識,也適合于打算進(jìn)階系統(tǒng)架構(gòu)師的朋友學(xué)習(xí)設(shè)計(jì)和使用系統(tǒng)架構(gòu)。 我曾經(jīng)與朋友開玩笑說,寫一部信息技術(shù)方面的著作并不會(huì)太難:會(huì)“翻墻”,會(huì)Google,能讀懂MSDN,能讀懂軟件說明書,多逛逛技術(shù)網(wǎng)站就行,如果還能懂點(diǎn)兒英文,則會(huì)更好、更方便。 這玩笑開得有點(diǎn)大,因?yàn)榉线@玩笑的“書”,除了外行人用來擺譜,大多數(shù)都被讀者或讀者請來的清潔工阿姨丟進(jìn)了垃圾桶。 這玩笑開得有點(diǎn)大,但還不算太離譜:我已經(jīng)很久沒有再去逛書店,沒有再讀書了,因?yàn),我真的買到過、讀到過這樣的書,有些受傷。 本書作者鄧太華先生是我的朋友,網(wǎng)上認(rèn)識的,許多年了,網(wǎng)名叫“深藍(lán)醫(yī)生”。 他給我的感覺是,為人誠實(shí)低調(diào),思路開闊,技術(shù)上有很強(qiáng)的“實(shí)戰(zhàn)”能力,值得學(xué)習(xí),也值得深交。 但我從來沒有想到他會(huì)著書立說。當(dāng)我這種因受過“書傷”而不再喜歡讀書的人得到這本《SOD框架“企業(yè)級”應(yīng)用數(shù)據(jù)架構(gòu)實(shí)戰(zhàn)》初稿后,很是詫異,但作為朋友,我還得硬著頭皮帶著審視的目光去試讀。 僅僅粗略地讀了一遍,我的詫異開始變成驚異:這才是我希望讀的書! 這時(shí)我才發(fā)現(xiàn),“深藍(lán)醫(yī)生”,名不虛傳:不但能“醫(yī)”計(jì)算機(jī),“醫(yī)”網(wǎng)絡(luò),“醫(yī)”程序,還能醫(yī)治我這種越來越不愿意買書,越來越不喜歡讀書的“讀書漸凍癥”! 因?yàn)椋@本書,有技術(shù)的面子,原理的里子,哲理的神髓。 絕大多數(shù)程序員都會(huì)與數(shù)據(jù)操作打交道,特別是服務(wù)器端的開發(fā)者,增刪改查(增加、刪除、修改和查詢的簡寫)更是家常便飯:要針對不同的需求進(jìn)行不同的增刪改查,針對不同的業(yè)務(wù)進(jìn)行不同的增刪改查,針對不同類型的數(shù)據(jù)庫進(jìn)行不同的增刪改查。 天天寫INSERT、DELETE、SELECT、UPDATE,煩不煩? 代碼稍有差錯(cuò),查非所問,煩不煩? 代碼雖然寫對了,但有細(xì)枝末節(jié)沒有照顧到,性能狂降,煩不煩? 同一個(gè)操作,針對不同類型的數(shù)據(jù)庫系統(tǒng)寫了無數(shù)段大致相似但又略有不同的代碼,煩不煩? 手工增刪改查,SQL語句如春日里京城的柳絮,滿天亂飛,真的好煩! 程序員絕不喜歡機(jī)械地重復(fù)做那些煩人的瑣事,于是有人化繁為簡,發(fā)明了“對象關(guān)系映射”:ORM。接著便有了Entity Framework、Dapper、CYQ.Data、Hibernate等很多很多的ORM框架,當(dāng)然,還有鄧先生的SOD框架。 ORM一出,程序員對數(shù)據(jù)庫操作的煩惱立即消散了80%。 但您真的懂ORM嗎?不懂或不太懂或懂而不精,那好,繼續(xù)讀下去。 本書從數(shù)到數(shù)據(jù),從數(shù)據(jù)到數(shù)據(jù)庫,從數(shù)據(jù)庫到SQL增刪改查,從SQL、數(shù)據(jù)對象到對象映射,有漢學(xué)有西學(xué),由里到外,由淺入深,放開筆墨,全方位闡釋了ORM的前世今身、ORM背后的核心理念與關(guān)鍵技術(shù),提供了大量的原創(chuàng)代碼與示例,最終給讀者呈現(xiàn)出一個(gè)立體的、有血有肉但又透明無礙的整套ORM技術(shù)。 其實(shí),這本書,我看重的不僅僅是ORM技術(shù),因?yàn)榧?xì)讀下去,您會(huì)驚異地發(fā)現(xiàn),它其實(shí)在向您表達(dá)編程對象與數(shù)據(jù)的關(guān)系,實(shí)體對象、業(yè)務(wù)對象、視圖對象與數(shù)據(jù)交互的關(guān)系,企業(yè)級大型應(yīng)用的數(shù)據(jù)架構(gòu)與解決方案,這些已經(jīng)遠(yuǎn)遠(yuǎn)超過了ORM的概念,深入到了數(shù)據(jù)的本質(zhì)以及駕馭數(shù)據(jù)的實(shí)戰(zhàn)能力。 序一 SOD框架“企業(yè)級”應(yīng)用數(shù)據(jù)架構(gòu)實(shí)戰(zhàn)本書更令人敬佩的是,“技術(shù)、原理、哲理”三位一體,高度融合。看似一本技術(shù)教程,但它不是為技術(shù)而技術(shù),而是在談技術(shù)的同時(shí),作者始終不離本質(zhì),努力給讀者闡釋技術(shù)背后的原理乃至“大道至簡”等更深層次的編程哲理,讀者能得到的,不僅僅是編程的技術(shù),還有編程的智慧,這來自于作者對于“數(shù)理”的深刻洞察,來自于作者傳統(tǒng)文化的底蘊(yùn)。 有人說,讀書能讀出“味道”來。我認(rèn)為,“讀書有味”的前提是那本書的內(nèi)容本身就要有“味”。 這本書,目前我僅粗讀了一遍,已經(jīng)嘗到味了,很鮮?梢钥隙ǎ嗟淖x者不但能嘗到這份美味,還會(huì)有更豐富更深層的受益。 微軟最有價(jià)值專家劉冰(宇內(nèi)流云)2020年元旦于成都 序三 “簡單就是美! “平凡即是偉大! 上面兩句話不知道是哪位名人說的,又或者是廣大勞動(dòng)人民總結(jié)的,反正我很小的時(shí)候就常常聽到這兩句話。這兩句話也成了我的人生格言,而且事實(shí)上我也是一個(gè)生活過得比較簡單的平凡人。當(dāng)然,這不能說我跟“偉大”有什么關(guān)系,我覺得絕大部分人都是像我一樣的平凡人,但正是這絕大多數(shù)的平凡人,創(chuàng)造了我們現(xiàn)在這個(gè)美好的世界,因此,說他們偉大一點(diǎn)也不過分。在我身邊,有一群平凡的程序員,用他們?nèi)諒?fù)一日,加班加點(diǎn),簡單而平凡的工作,編寫了許多有價(jià)值的商業(yè)軟件,付出了青春和汗水,但除了相應(yīng)的薪水,他們還有什么更大的回報(bào)嗎?不排除程序員中有一些出類拔萃的人,他們?nèi)〉昧斯ぷ魃系某晒,在能力上獲得了很大的提高,當(dāng)了公司高管又或者是自己創(chuàng)業(yè),事業(yè)上取得了一定成就。但是,這樣出類拔萃的程序員是很少的,在本書第1章中,我根據(jù)《2018年中國程序員生存現(xiàn)狀報(bào)告》進(jìn)行了分析,年薪超過30萬元的程序員不超過10%,而年薪10萬~15萬元有5~10年工作經(jīng)驗(yàn)的程序員占比最高。如果按照社會(huì)上普遍的以收入來衡量一個(gè)人是否成功,那么大部分程序員的職業(yè)人生都是不成功的,他們并沒有隨著工作年限的增長而獲得相應(yīng)的成長,這是一個(gè)無奈的現(xiàn)實(shí)。然而,換一個(gè)角度來看,大部分程序員雖然每天都做著簡單而重復(fù)的增刪改查(增加、刪除、修改和查詢的簡寫)工作,但他們用平凡的工作為自己服務(wù)的公司創(chuàng)造了利潤,為社會(huì)創(chuàng)造了價(jià)值,這也算是一種成功吧! 身處平凡階層的每一個(gè)人都有一個(gè)想成功、想成長、想取得成就的美好愿望。 然而,您可能沒有名校背景,沒有大廠(比如BAT系的公司)履歷,沒有做過像樣兒的大項(xiàng)目,沒有拿得出手的成果,像現(xiàn)在流行的大數(shù)據(jù)、人工智能、機(jī)器學(xué)習(xí)、區(qū)塊鏈這些炙手可熱的新技術(shù)更是不懂,在這種諸多不利的情況下,如果自己再不想辦法改變,又怎么能輕易地實(shí)現(xiàn)上面那個(gè)愿望呢?這應(yīng)該是大部分的普通程序員所面臨的現(xiàn)實(shí)問題。我,也曾經(jīng)是這其中的一員,但這不妨礙我自己實(shí)現(xiàn)上面那個(gè)愿望;仡欁约鹤龀绦騿T的時(shí)光,我覺得自己沒有虛度光陰,在某一方面我有能拿得出手的東西,并獲得了一定的成功和成就,得到了顯著的成長。我的“秘籍”就是,如果你覺得一個(gè)東西有點(diǎn)復(fù)雜,你就先用簡單的方式把它做好,做深入,慢慢地你就會(huì)發(fā)現(xiàn),原來用簡單的方式也可以構(gòu)建一個(gè)復(fù)雜的系統(tǒng),等你回過頭來再去看之前你覺得復(fù)雜的東西,你就會(huì)驚奇地發(fā)現(xiàn):原來這樣做跟我的設(shè)想一樣。。≒S:其實(shí)這并不是什么“秘籍”,這正是LISP黑客所擅長的工作方式,即先從最小的地方用最簡單的方式將它運(yùn)行起來,采用自底向上的方式一步一步地構(gòu)建自己的語言,這種定制的語言抽象程度越高就越接近問題的本質(zhì),從而最終構(gòu)建出一個(gè)復(fù)雜的系統(tǒng)。我對LISP這種工作方式很推崇,我的SOD框架中的OQL語言的設(shè)計(jì)就深受這種思想的啟發(fā)。) 其實(shí),只有經(jīng)過長期而不斷的努力,才能突然領(lǐng)悟到別人設(shè)計(jì)的精妙,思想的深邃,才會(huì)發(fā)現(xiàn)這些設(shè)計(jì)思想都是自然而然的,一氣呵成的,有時(shí)甚至?xí)腥淮笪颍涸瓉硎沁@樣啊,為啥我之前沒有想到呢? 前言 SOD框架“企業(yè)級”應(yīng)用數(shù)據(jù)架構(gòu)實(shí)戰(zhàn)對于別人看一眼就能懂的問題,我總是要從簡單的東西開始慢慢來領(lǐng)悟,直到某一天才豁然開朗。這期間我走了不少彎路,付出了比別人更多的努力,我常常自嘲自己是“笨鳥先飛”。我想“笨鳥”應(yīng)該像“聰明”的鳥兒一樣總是少數(shù),那么身處絕大多數(shù)普通“鳥兒”中的“您”,一定能夠很快看懂我這本書所提供的這些簡單的方案,把自己每天做的增刪改查工作,做得更好更深入,然后去構(gòu)建自己強(qiáng)大的復(fù)雜的應(yīng)用,“飛”得比我更高、更遠(yuǎn)。我說的這個(gè)方案便是本書要介紹的數(shù)據(jù)開發(fā)框架——SOD框架,它追求的目標(biāo)是簡單與效率的平衡,體現(xiàn)在代碼的精簡,開發(fā)、維護(hù)的簡單與追求極致的運(yùn)行效率。SOD框架是我十幾年開發(fā)經(jīng)驗(yàn)的總結(jié),我想我應(yīng)該將這些經(jīng)驗(yàn)分享給大家,這便是我決定寫這本書的理由。 ◆ 這不是一本編程入門的書籍 編程入門的書籍汗牛充棟,它們大多都圍繞著如何使用某一個(gè)具體的編程語言的功能來介紹的,是面面俱到、保姆式的教學(xué)過程。顯然,本書不是這樣,它緊緊圍繞編程最常見的“數(shù)據(jù)”問題,由淺入深地從介紹數(shù)據(jù)的概念開始,到數(shù)據(jù)的組織、存取和應(yīng)用,再深入到數(shù)據(jù)的架構(gòu)問題,并給出了豐富的數(shù)據(jù)開發(fā)的綜合解決方案示例。所以,需要先對編程有一定的基礎(chǔ)之后才能應(yīng)用本書介紹的知識來編程,在有一定的開發(fā)經(jīng)驗(yàn)之后,再來閱讀本書才能發(fā)現(xiàn)數(shù)據(jù)與編程的關(guān)系,才能更加深刻地認(rèn)識編程的本質(zhì),正所謂“溫故而知新”。因此,本書不是一本編程入門的書籍,但可以作為一本沒有任何數(shù)據(jù)開發(fā)經(jīng)驗(yàn)的“新手”學(xué)習(xí)數(shù)據(jù)開發(fā)的入門書籍,當(dāng)然也適合有一定開發(fā)經(jīng)驗(yàn)的程序員為進(jìn)一步提高數(shù)據(jù)開發(fā)與架構(gòu)能力來閱讀。 ◆ 這是一本淺析數(shù)據(jù)本質(zhì)的書 當(dāng)你有比較豐富的開發(fā)經(jīng)驗(yàn)之后,想進(jìn)一步提高開發(fā)能力,朝著資深開發(fā)工程師或者架構(gòu)師方向發(fā)展的時(shí)候,需要對數(shù)據(jù)有比較深刻的認(rèn)識,本書嘗試以抽象的方法來認(rèn)識數(shù)的概念,漫話數(shù)的起源,探討數(shù)的表示與存儲(chǔ)、數(shù)據(jù)與消息、數(shù)據(jù)與數(shù)據(jù)庫、數(shù)據(jù)與編程等的關(guān)系,嘗試從多個(gè)角度來認(rèn)識數(shù)據(jù)和它背后的邏輯,以期接近數(shù)據(jù)的本質(zhì)。 ◆ 這是一本數(shù)據(jù)開發(fā)實(shí)用的編程書 開發(fā)一個(gè)存取數(shù)據(jù)的應(yīng)用程序,除了熟練使用SQL,還需要了解數(shù)據(jù)庫和數(shù)據(jù)驅(qū)動(dòng)程序,需要掌握數(shù)據(jù)訪問組件,需要熟悉數(shù)據(jù)訪問模式、框架和工具,比如熟練設(shè)計(jì)和使用一個(gè)ORM框架,另外還需要掌握數(shù)據(jù)與窗體控件的開發(fā),甚至熟悉數(shù)據(jù)綁定技術(shù),使用MVVM框架?傊,本書介紹了與數(shù)據(jù)開發(fā)相關(guān)的主要知識和開發(fā)經(jīng)驗(yàn),能夠讓你在數(shù)據(jù)開發(fā)方面提高效率,少走彎路,得心應(yīng)手。 ◆ 可以將本書視為一本學(xué)習(xí)應(yīng)用“數(shù)據(jù)架構(gòu)”的書 當(dāng)設(shè)計(jì)一個(gè)軟件的系統(tǒng)架構(gòu)時(shí),會(huì)包含業(yè)務(wù)架構(gòu)、應(yīng)用架構(gòu)、數(shù)據(jù)架構(gòu)和技術(shù)架構(gòu)等方面,其中數(shù)據(jù)架構(gòu)是系統(tǒng)架構(gòu)的重要組成部分,數(shù)據(jù)架構(gòu)不是數(shù)據(jù)結(jié)構(gòu),它不單是研究數(shù)據(jù)庫的設(shè)計(jì)問題,在現(xiàn)在多層軟件架構(gòu)和分布式架構(gòu)中,數(shù)據(jù)架構(gòu)更需要關(guān)注數(shù)據(jù)的處理問題,也就是不同結(jié)構(gòu)的數(shù)據(jù)如何表示、如何分布、如何存儲(chǔ)、如何傳輸轉(zhuǎn)換等方面的問題,這樣數(shù)據(jù)架構(gòu)就與三層和多層架構(gòu)、DDD/DCI架構(gòu)、分布式架構(gòu)、微服務(wù)架構(gòu)等問題密切相關(guān)了。本書嘗試從數(shù)據(jù)在各種架構(gòu)中的應(yīng)用來向讀者介紹如何設(shè)計(jì)和使用一個(gè)架構(gòu),并給出實(shí)際的案例來說明。因此,本書可以作為您進(jìn)階系統(tǒng)架構(gòu)師的一本很好的實(shí)戰(zhàn)指導(dǎo)書。 ◆ 本書的寫作特點(diǎn) 本書是一本既不只講理論,也不只講實(shí)戰(zhàn)的書,我覺得“理論指導(dǎo)實(shí)踐,實(shí)踐檢驗(yàn)理論”是學(xué)習(xí)的好方法,在用中學(xué),在學(xué)中用,有的放矢,目標(biāo)明確,理論和實(shí)踐相互促進(jìn),這樣就能更好地學(xué)習(xí)。所以,筆者花費(fèi)了一點(diǎn)筆墨來介紹數(shù)據(jù)相關(guān)的理論,然后通過一個(gè)具體的數(shù)據(jù)框架(SOD框架)來介紹數(shù)據(jù)的開發(fā)和應(yīng)用,將框架的設(shè)計(jì)原理與具體的實(shí)例代碼相結(jié)合,這樣理論與實(shí)踐相結(jié)合,使讀者更容易學(xué)習(xí)和掌握數(shù)據(jù)開發(fā)的知識和技巧,并在自己實(shí)際的開發(fā)中游刃有余。 ◆ 本書的讀者對象 本書適合于有一定編程開發(fā)基礎(chǔ)知識的程序員進(jìn)一步學(xué)習(xí)和掌握與數(shù)據(jù)應(yīng)用相關(guān)的開發(fā)知識,更適合于有一定開發(fā)經(jīng)驗(yàn)的程序員鞏固提高數(shù)據(jù)開發(fā)方面的理論知識,也適合于打算進(jìn)階系統(tǒng)架構(gòu)師的朋友學(xué)習(xí)設(shè)計(jì)和使用系統(tǒng)架構(gòu)。雖然本書使用SOD框架做例子,但它和書中的示例大多是使用 .Net平臺(tái)語言來寫的,并且它的應(yīng)用和設(shè)計(jì)思想也適合JAVA、C++等非 .Net語言平臺(tái)的程序員朋友參考使用。 另外,我在本書中花費(fèi)了一點(diǎn)筆墨來介紹數(shù)和數(shù)據(jù)的本質(zhì)、數(shù)據(jù)的應(yīng)用發(fā)展歷史等內(nèi)容,用輕松而又富有想象的文字趣味性地介紹數(shù)據(jù)的概念和應(yīng)用,比如嘗試從中國傳統(tǒng)文化中的河圖、洛書、易經(jīng)八卦來漫話數(shù)字背后的理論架構(gòu)。所以,這部分內(nèi)容也可以作為介紹數(shù)字文化和數(shù)據(jù)應(yīng)用的科普內(nèi)容,供非計(jì)算機(jī)行業(yè)的人士閱讀。比如我將這部分內(nèi)容整理并做成了用于介紹少兒編程思想的幻燈片,在北京市朝陽區(qū)某小學(xué)講授此幻燈片,看似高深的理論,通過這種趣味性的教學(xué)方式使這些內(nèi)容連小學(xué)生都很容易理解了。 ◆ 本書的結(jié)構(gòu) 第1章軟件開發(fā)中的“二·八定律” 通過對程序員行業(yè)調(diào)查報(bào)告進(jìn)行的分析,大多數(shù)程序員并沒有隨著工作年限的增長而成長,5年工作年限后能力不再明顯增長,30萬元年薪也成了一道坎。造成這種現(xiàn)象的原因就是大部分項(xiàng)目是沒有多少技術(shù)含量的,大部分時(shí)間是在做重復(fù)的增刪改查工作,并且這樣的項(xiàng)目還有不少是996的,使程序員透支了青春和健康。 第2章數(shù)據(jù)的基礎(chǔ)概念和應(yīng)用 通過對河圖、洛書的研究,抽象數(shù)的概念,漫話數(shù)的起源,探討數(shù)的表示與存儲(chǔ)、數(shù)據(jù)與消息、數(shù)據(jù)與數(shù)據(jù)庫、數(shù)據(jù)與編程等的關(guān)系,嘗試從多個(gè)角度來認(rèn)識數(shù)據(jù)和它背后的邏輯,以期接近數(shù)據(jù)的本質(zhì),這樣對數(shù)據(jù)開發(fā)、數(shù)據(jù)架構(gòu)就能有更深刻的理解。 第3章數(shù)據(jù)庫應(yīng)用開發(fā) 首先對數(shù)據(jù)庫類型做一個(gè)簡要分類;然后對比介紹訪問不同數(shù)據(jù)庫的各種驅(qū)動(dòng)程序,介紹使用數(shù)據(jù)訪問組件的最佳實(shí)踐;接著簡單回顧數(shù)據(jù)庫應(yīng)用開發(fā)的基礎(chǔ)知識;最后介紹數(shù)據(jù)查詢與映射的技術(shù)(SQLMAP),解決一般項(xiàng)目開發(fā)中SQL滿天飛、查詢復(fù)雜難以維護(hù)、項(xiàng)目軟件無法輕松支持多種數(shù)據(jù)庫等問題。 第4章對象關(guān)系映射 首先從對象與關(guān)系的阻抗問題開始介紹ORM應(yīng)用中的難題;然后以SOD框架為例,介紹ORM中實(shí)體類的設(shè)計(jì),怎樣跟蹤實(shí)體對象的修改狀態(tài),以及一般ORM查詢的方式;最后介紹框架中的ORM查詢語言(OQL)的設(shè)計(jì)和使用。 第5章數(shù)據(jù)窗體開發(fā) 在企業(yè)應(yīng)用開發(fā)中,處理各種表單數(shù)據(jù)的數(shù)據(jù)窗體開發(fā)需求很常見。SOD框架利用.NET原生控件內(nèi)置的數(shù)據(jù)綁定技術(shù),將常見的表單處理過程封裝成一套智能表單,自動(dòng)完成表單數(shù)據(jù)的讀取和保存,使得開發(fā)ASP.NET Web Form/WinForms上的數(shù)據(jù)窗體有完全一致的開發(fā)使用體驗(yàn)。借鑒MVVM原理,SOD的WinForms數(shù)據(jù)表單也實(shí)現(xiàn)了與WPF MVVM框架同樣的功能,本章介紹這個(gè)技術(shù)實(shí)現(xiàn)的原理和應(yīng)用示例。 第6章分布式系統(tǒng)架構(gòu)與數(shù)據(jù)開發(fā) 分布式系統(tǒng)相對于單機(jī)系統(tǒng),能夠提供更大的、可伸縮服務(wù)的能力。在分布式系統(tǒng)架構(gòu)中,不論是傳統(tǒng)的三層和多層應(yīng)用架構(gòu),還是DDD/DCI架構(gòu)或者洋蔥架構(gòu),數(shù)據(jù)的存儲(chǔ)和訪問都發(fā)生了很大的變化。本章以這些常見的架構(gòu)為例,介紹在分布式系統(tǒng)環(huán)境下,如何處理并發(fā)更新、讀寫分離、分庫分表、分布式事務(wù)等數(shù)據(jù)開發(fā)和架構(gòu)設(shè)計(jì)等問題,并且通過一個(gè)實(shí)例來講解將多種架構(gòu)結(jié)合在一起的分布式混合架構(gòu)方案。 第7章企業(yè)級解決方案應(yīng)用示例 企業(yè)開發(fā)的關(guān)鍵特征是企業(yè)項(xiàng)目通常持續(xù)較長時(shí)間,項(xiàng)目以業(yè)務(wù)為中心而不是以技術(shù)為中心,所以企業(yè)級開發(fā)要求使用的技術(shù)相對靈活,便于維護(hù)。對于企業(yè)項(xiàng)目開發(fā)中的數(shù)據(jù)開發(fā)而言,大部分項(xiàng)目數(shù)據(jù)量雖然沒有大型互聯(lián)網(wǎng)項(xiàng)目的數(shù)據(jù)量那么大,但是數(shù)據(jù)結(jié)構(gòu)和數(shù)據(jù)關(guān)系復(fù)雜,數(shù)據(jù)的事務(wù)一致性要求高,不同數(shù)據(jù)庫平臺(tái)之間的數(shù)據(jù)同步和復(fù)制功能也很常見,并且對聯(lián)機(jī)事務(wù)處理的性能要求越來越高。本章通過介紹內(nèi)存數(shù)據(jù)庫、異構(gòu)數(shù)據(jù)庫同步和應(yīng)用層事務(wù)數(shù)據(jù)復(fù)制的內(nèi)容,讓讀者了解SOD框架對于企業(yè)級項(xiàng)目解決方案簡單而又靈活的支持能力。 附錄ASOD框架和開源社區(qū) 簡要介紹SOD框架的發(fā)展歷史,對跨平臺(tái)和.NET Core的支持,以及探討向其他語言平臺(tái)移植的可能性。最后介紹了SOD框架的開源社區(qū)情況,使讀者了解本書的程序示例和源碼的出處,使他們可以加入框架的開源項(xiàng)目。 ◆ 關(guān)于作者 鄧太華,曾經(jīng)使用筆名“深藍(lán)醫(yī)生”在CSDN和博客園寫了很多博客文章,現(xiàn)為某電商項(xiàng)目創(chuàng)業(yè)公司創(chuàng)始人。非計(jì)算機(jī)專業(yè),2002年誤打誤撞進(jìn)入IT領(lǐng)域,先是做計(jì)算機(jī)硬件和網(wǎng)絡(luò)維護(hù),后成為專職程序員。2004年到北京發(fā)展,2008年開始擔(dān)任軟件架構(gòu)師,因此在系統(tǒng)架構(gòu)方面有超過10年的工作經(jīng)驗(yàn)。 在做技術(shù)的過程中遇到了各種“坑”,將解決這些“坑”的經(jīng)驗(yàn)匯集起來便有了PDF.NET框架:一個(gè)專注于數(shù)據(jù)開發(fā)的框架。2010年將PDF.NET開源,2014年更名為SOD框架。此外,還推出了一個(gè)基于WCF的消息服務(wù)框架——iMSF,是基于長連接TCP雙工通信的支持消息推送和Actor模型的消息服務(wù)框架(此框架在2015年開源)。除了研究技術(shù)問題,對管理和業(yè)務(wù)問題也比較感興趣,2013年提出了“三維度(場景+角色+時(shí)間)”理論,是一種符合國人思維方式的業(yè)務(wù)分析方法論。 ◆ 致謝 首先要感謝前騰訊 .NET技術(shù)專家、連續(xù)15年微軟MVP、騰訊云TVP、華為云MVP,現(xiàn)深圳市友浩達(dá)科技CEO 張善友先生, .NET跨平臺(tái)應(yīng)用領(lǐng)域?qū)<摇⑽④汳VP、知名Linux Web服務(wù)器軟件Jexus作者劉冰(宇內(nèi)流云)先生,資深JAVA開發(fā)專家申毅先生對本書的贊譽(yù),感謝他們在百忙之中為本書作序,他們的見解對軟件開發(fā)有深刻的洞察力和預(yù)見性,這是他們成功的特質(zhì)。其中,要特別感謝劉冰先生給予本書的極高贊譽(yù),他寫序三易其稿,這種嚴(yán)肅認(rèn)真的態(tài)度讓我深受感動(dòng),這可能就是他的作品功能強(qiáng)大、穩(wěn)定可靠且深受歡迎的原因吧。 本書得以出版,需要感謝北京航空航天大學(xué)出版社的編輯,他們讓一個(gè)從未想過要寫書的普通程序員決定寫一本書來系統(tǒng)總結(jié)以往只是寫在博客中的技術(shù)經(jīng)驗(yàn),將它分享給更多的讀者。另外,需要感謝所有支持SOD框架的用戶朋友,寫這本書算是對你們以往支持我做好這個(gè)開源框架的一種回饋。此外,最需要感謝的是我的家人,支持和鼓勵(lì)我在艱難的創(chuàng)業(yè)過程中寫完這本書,家人的理解和關(guān)愛太重要了,沒有你們就沒有我人生中的這第一本書。 當(dāng)然,這段簡短的致謝完全不足以感謝所有對我寫這本書有幫助的人,在本書的附錄中我將詳細(xì)列舉他們曾經(jīng)幫助過我的事情,對他們的支持再次感謝。 ◆ 如何使用本書 正如本書的書名一樣,這是一本實(shí)戰(zhàn)類型的書,盡管其中有一半多的文字都在講述數(shù)據(jù)開發(fā)相關(guān)的理論知識,但最終的目的還是讓理論更好地指導(dǎo)實(shí)踐,所以強(qiáng)烈建議在閱讀本書之前先看附錄A.4節(jié)SOD框架開源社區(qū)的內(nèi)容,從SOD框架的源代碼倉庫克隆一份源碼來編譯運(yùn)行,在源碼中基本都能找到本書中出現(xiàn)的代碼示例,實(shí)際運(yùn)行這些代碼能夠讓你對本書的內(nèi)容有更直觀的印象。雖然書中的內(nèi)容至少有一半來自我的博客文章,但寫書時(shí)不能把原文中大段的代碼直接粘貼過來占據(jù)過大的篇幅,所以建議您結(jié)合我的博客文章一起來閱讀本書會(huì)收到更好的效果。 盡管本書中給出的示例代碼基本上都在源碼中運(yùn)行或者測試通過,但限于我寫作的水平或者源碼已經(jīng)修改或更新,書中的這些示例代碼可能與您實(shí)際運(yùn)行的代碼有所差異,那么以框架最新的源碼為準(zhǔn)。另外,由于我本人的能力限制,在介紹相關(guān)理論知識時(shí)可能存在一些錯(cuò)誤或者偏差,如果您在閱讀本書的過程中有任何問題,希望能反饋給我,聯(lián)系方式在本書附錄A.4中。 深藍(lán)醫(yī)生2020年1月 鄧太華,曾經(jīng)使用筆名“深藍(lán)醫(yī)生”在CSDN等博客網(wǎng)站上寫了很多博客文章,現(xiàn)為某電商項(xiàng)目創(chuàng)業(yè)公司創(chuàng)始人。非計(jì)算機(jī)專業(yè),2002年誤打誤撞進(jìn)入IT領(lǐng)域,先是做計(jì)算機(jī)硬件和網(wǎng)絡(luò)維護(hù),后成為專職程序員。2004年到北京發(fā)展,2008年開始擔(dān)任軟件架構(gòu)師,因此在系統(tǒng)架構(gòu)方面有超過10年的工作經(jīng)驗(yàn)。 在做技術(shù)的過程中遇到了各種“坑”,將解決這些“坑”的經(jīng)驗(yàn)匯集起來便有了PDF.NET框架:一個(gè)專注于數(shù)據(jù)開發(fā)的框架。2010年將PDF.NET開源,2014年更名為SOD框架。此外,還推出了一個(gè)基于WCF的消息服務(wù)框架——iMSF,是基于長連接TCP雙工通信的支持消息推送和Actor模型的消息服務(wù)框架(此框架在2015年開源)。除了研究技術(shù)問題,對管理和業(yè)務(wù)問題也比較感興趣,2013年提出了“三維度(場景+角色+時(shí)間)”理論,是一種符合國人思維方式的業(yè)務(wù)分析方法論。 第1章軟件開發(fā)中的“二·八定律”1 1.1大部分項(xiàng)目是沒有技術(shù)含量的1 1.2大部分時(shí)間是在做重復(fù)的增刪改查工作4 1.3工作996,生病ICU5 1.4迷茫的開發(fā)人員9 第2章數(shù)據(jù)的基礎(chǔ)概念和應(yīng)用10 2.1數(shù)據(jù)漫話史——抽象、表示與存儲(chǔ)10 2.1.1“數(shù)”的起源10 2.1.2原始的數(shù)字15 2.1.3河圖與十進(jìn)制16 2.1.4八卦與二進(jìn)制19 2.1.5易經(jīng)與量子理論31 2.1.6數(shù)據(jù)、信息和知識36 2.1.7數(shù)據(jù)的載體——存儲(chǔ)介質(zhì)44 2.2算法+數(shù)據(jù)結(jié)構(gòu)=程序52 2.3數(shù)據(jù)與面向?qū)ο缶幊?5 2.4數(shù)據(jù)與函數(shù)式編程56 2.5數(shù)據(jù)的成本58 2.5.1CPU寄存器和內(nèi)存數(shù)據(jù)58 2.5.2進(jìn)程內(nèi)緩存和分布式緩存59 2.5.3持久化數(shù)據(jù)源62 2.6數(shù)據(jù)與消息62 2.6.1命令、事件與消息62 2.6.2實(shí)時(shí)消息與消息隊(duì)列64 2.7XML與數(shù)據(jù)文件66 2.8關(guān)系數(shù)據(jù)庫與NoSQL70 2.9大數(shù)據(jù)71 第3章數(shù)據(jù)庫應(yīng)用開發(fā)73 3.1數(shù)據(jù)庫分類73 3.1.1嵌入式數(shù)據(jù)庫73 3.1.2服務(wù)器數(shù)據(jù)庫75 3.2數(shù)據(jù)庫驅(qū)動(dòng)程序76 3.2.1ODBC76 3.2.2OLEDB78 3.2.3ADO.NET79 3.2.4SOD84 3.3數(shù)據(jù)訪問組件的最佳實(shí)踐89 3.3.1數(shù)據(jù)訪問模式89 3.3.2配置數(shù)據(jù)連接93 3.3.3管理數(shù)據(jù)連接對象96 3.3.4優(yōu)化數(shù)據(jù)命令對象100 3.3.5查詢中使用長連接104 3.3.6使用跨組件的事務(wù)107 3.3.7跟蹤SQL執(zhí)行情況114 3.4數(shù)據(jù)庫應(yīng)用開發(fā)基礎(chǔ)123 3.4.1常見的SQL工具123 3.4.2SQL標(biāo)準(zhǔn)126 3.4.3SQL方言128 3.4.4存儲(chǔ)過程129 3.4.5參數(shù)化查詢130 3.5數(shù)據(jù)查詢與映射136 3.5.1SQL滿天飛的窘境136 3.5.2SQLMAP的架構(gòu)規(guī)范137 3.5.3集中管理SQL查詢141 3.5.4定義SQL與程序的映射144 3.5.5處理復(fù)雜查詢152 3.5.6自動(dòng)生成代碼155 SOD框架“企業(yè)級”應(yīng)用數(shù)據(jù)架構(gòu)實(shí)戰(zhàn)第4章對象關(guān)系映射160 4.1對象與關(guān)系的阻抗160 4.1.1話語環(huán)境的思想沖突160 4.1.2結(jié)構(gòu)的不匹配163 4.1.3繼承關(guān)系的難題164 4.1.4復(fù)雜的類關(guān)系167 4.1.5正視“阻抗誤配”168 4.2數(shù)據(jù)的容器——實(shí)體類170 4.2.1實(shí)體類的元數(shù)據(jù)映射170 4.2.2數(shù)據(jù)類型的映射173 4.2.3DBNull與null175 4.2.4強(qiáng)類型映射與弱類型映射176 4.2.5日期類型的處理177 4.2.6枚舉類型的屬性179 4.2.7實(shí)體類與DTO的映射181 4.3實(shí)體類的創(chuàng)建184 4.3.1默認(rèn)方式創(chuàng)建184 4.3.2動(dòng)態(tài)創(chuàng)建實(shí)體類185 4.3.3映射任意查詢結(jié)果186 4.3.4映射存儲(chǔ)過程190 4.3.5實(shí)體類生成工具193 4.3.6Code First197 4.4數(shù)據(jù)的更改狀態(tài)199 4.4.1更改通知接口199 4.4.2查詢更改狀態(tài)201 4.4.3重置更改狀態(tài)202 4.5實(shí)體類屬性的訪問203 4.5.1設(shè)置數(shù)據(jù)203 4.5.2獲取數(shù)據(jù)205 4.5.3數(shù)據(jù)訪問事件208 4.5.4索引器210 4.6實(shí)體對象查詢212 4.6.1實(shí)體對象查詢與數(shù)據(jù)訪問組件212 4.6.2查詢單個(gè)實(shí)體對象214 4.6.3查詢實(shí)體對象列表(List)216 4.6.4查詢父子實(shí)體219 4.6.5更新和刪除實(shí)體對象223 4.6.6高效插入實(shí)體對象列表的最佳實(shí)踐224 4.6.7微型ORM228 4.7ORM查詢語言——OQL231 4.7.1實(shí)體對象查詢的缺陷231 4.7.2JAVA框架中的ORM查詢語言233 4.7.3LINQ——EF框架的ORM查詢語言233 4.7.4OQL——SOD框架的ORM查詢語言236 4.7.5簡單查詢?nèi)腴T237 4.7.6鏈?zhǔn)奖磉_(dá)式與多級表達(dá)式245 4.7.7操作符重載249 4.7.8指定查詢的實(shí)體類屬性253 4.7.9查詢條件表達(dá)式255 4.7.10構(gòu)建復(fù)雜的查詢條件261 4.7.11靈活的排序方式266 4.7.12簡單的分頁方法269 4.7.13聚合運(yùn)算277 4.7.14多實(shí)體類聯(lián)合查詢279 4.7.15高級子查詢287 4.7.16分組過濾289 4.7.17使用數(shù)據(jù)庫函數(shù)292 4.7.18使用數(shù)據(jù)庫鎖295 4.7.19批量更新和插入299 4.7.20動(dòng)態(tài)條件查詢303 4.7.21使用接口查詢306 4.8大數(shù)據(jù)量查詢309 4.9實(shí)體類的序列化311 4.9.1應(yīng)用場景建議311 4.9.2XML序列化313 4.9.3JSON序列化316 4.9.4二進(jìn)制序列化318 第5章數(shù)據(jù)窗體開發(fā)321 5.1智能表單321 5.1.1數(shù)據(jù)控件322 5.1.2查詢控件324 5.1.3驗(yàn)證控件327 5.1.4命令控件329 5.1.5數(shù)據(jù)綁定331 5.1.6表單數(shù)據(jù)填充331 5.1.7表單數(shù)據(jù)收集333 5.1.8表單數(shù)據(jù)保存334 5.2Web Form數(shù)據(jù)窗體開發(fā)335 5.2.1Web數(shù)據(jù)控件336 5.2.2Web窗體數(shù)據(jù)綁定342 5.2.3Web窗體表單處理346 5.2.4Web窗體列表和分頁控件355 5.3WinForms數(shù)據(jù)窗體開發(fā)356 5.3.1WinForms數(shù)據(jù)控件356 5.3.2WinForms窗體數(shù)據(jù)綁定359 5.3.3WinForms窗體表單處理361 5.4WinForms/WPF MVVM框架367 5.4.1MVVM原理簡介367 5.4.2MVVM窗體接口373 5.4.3MVVM命令處理接口375 5.4.4MVVM窗體示例382 第6章分布式系統(tǒng)架構(gòu)與數(shù)據(jù)開發(fā)398 6.1三層和多層應(yīng)用架構(gòu)398 6.1.1分層的網(wǎng)絡(luò)架構(gòu)398 6.1.2軟件三層架構(gòu)399 6.1.3SOD分層解決方案401 6.1.4多層應(yīng)用架構(gòu)403 6.2DDD架構(gòu)403 6.2.1軟件復(fù)雜多變的難題403 6.2.2領(lǐng)域模型設(shè)計(jì)406 6.2.3領(lǐng)域驅(qū)動(dòng)架構(gòu)407 6.3DCI架構(gòu)409 6.3.1DCI架構(gòu)的本質(zhì)410 6.3.2DCI架構(gòu)的實(shí)現(xiàn)411 6.3.3業(yè)務(wù)分析三維度理論412 6.4洋蔥架構(gòu)416 6.5分布式混合架構(gòu)實(shí)戰(zhàn)418 6.5.1系統(tǒng)分層模型419 6.5.2應(yīng)用軟件架構(gòu)422 6.5.3模塊式架構(gòu)426 6.5.4混合式三層架構(gòu)436 6.5.5消息服務(wù)框架437 6.6并發(fā)更新442 6.6.1電商平臺(tái)的“減庫存”難題443 6.6.2Entity Framework的樂觀并發(fā)447 6.6.3并發(fā)更新小結(jié)449 6.7多數(shù)據(jù)源查詢449 6.7.1分布式環(huán)境中的多數(shù)據(jù)源449 6.7.2集成開發(fā)工具的多數(shù)據(jù)源查詢451 6.8讀寫分離457 6.8.1應(yīng)用場景457 6.8.2快照復(fù)制458 6.8.3事務(wù)復(fù)制460 6.8.4讀寫分離應(yīng)用架構(gòu)461 6.9分庫和分表464 6.9.1垂直(縱向)切分464 6.9.2水平(橫向)切分466 6.9.3分庫分表衍生的問題468 6.9.4使用分區(qū)表473 6.9.5使用鏈接服務(wù)器477 6.9.6SOD框架分庫分表480 6.10分布式事務(wù)493 6.10.1分布式事務(wù)簡介493 6.10.2分布式事務(wù)實(shí)現(xiàn)層面493 6.10.3二階段提交協(xié)議(2PC)496 6.10.4三階段提交協(xié)議(3PC)498 6.10.5基于微服務(wù)的3PC分布式事務(wù)500 6.10.6實(shí)例——電商下單的分布式事務(wù)514 第7章企業(yè)級解決方案應(yīng)用示例535 7.1內(nèi)存數(shù)據(jù)庫535 7.1.1架構(gòu)設(shè)計(jì)536 7.1.2數(shù)據(jù)的持久化538 7.1.3構(gòu)造“數(shù)據(jù)倉庫”539 7.1.4移花接木540 7.1.5打造“數(shù)據(jù)集市”542 7.1.6使用“內(nèi)存數(shù)據(jù)庫”實(shí)例544 7.2異構(gòu)數(shù)據(jù)庫同步546 7.2.1異構(gòu)數(shù)據(jù)庫平臺(tái)546 7.2.2數(shù)據(jù)同步流程和方案547 7.2.3SOD框架數(shù)據(jù)同步方案550 7.2.4實(shí)例介紹——數(shù)據(jù)導(dǎo)出554 7.2.5實(shí)例介紹——數(shù)據(jù)導(dǎo)入561 7.2.6實(shí)例介紹——演示程序568 7.3應(yīng)用層事務(wù)數(shù)據(jù)復(fù)制579 7.3.1數(shù)據(jù)復(fù)制簡介579 7.3.2應(yīng)用層事務(wù)日志581 7.3.3應(yīng)用層數(shù)據(jù)復(fù)制591 7.3.4實(shí)現(xiàn)方案設(shè)計(jì)593 附錄ASOD框架和開源社區(qū)613 A.1SOD框架發(fā)展歷史613 A.2.NET Core跨平臺(tái)支持615 A.3向其他平臺(tái)移植的可能性619 A.4SOD框架開源社區(qū)621 A.4.1GitHub和碼云621 A.4.2Nuget程序包622 A.4.3社區(qū)資源625 A.4.4社區(qū)反饋627 后記628
你還可能感興趣
我要評論
|