.NET 分布式架構(gòu)開發(fā)實戰(zhàn)之二 草稿設(shè)計
前言:
本篇之所以稱為草稿設(shè)計,是因為設(shè)計的都是在紙上完成的。反映了一個思考的過程。
本篇的議題如下:
1). 第一個數(shù)據(jù)層草圖的提出
2). 對數(shù)據(jù)訪問層的思考
3). 第二個數(shù)據(jù)層草圖的提出
1.數(shù)據(jù)層草圖的提出
Richard開始著手設(shè)計,一開始他沒有就立刻在自己的計算機(jī)開始敲代碼。而且采用筆+紙開始構(gòu)思。
因為他認(rèn)為:寫程序不是什么時候都得上機(jī),腦子里面想什么的才是最重要的,往往很多時候,在設(shè)計程序時,首先在頭腦中就已經(jīng)把整個功能已經(jīng)實現(xiàn)了,甚至代碼的詳細(xì)編寫都已經(jīng)在頭腦中走了一遍,并且在頭腦中”運(yùn)行,調(diào)試”了。
開始設(shè)計了,因為這次Richard想要提出一個比較好的架構(gòu),一個比較強(qiáng)大的企業(yè)級的架構(gòu),所以參看成功的一些案例是很有必要,Richard也想到了微軟best practice的那些推薦的架構(gòu)組織方式和建議(大家對best practice不熟悉也要緊,不會影響閱讀)。
之后,Richard的第一個草圖就出來了:
一個架構(gòu)組織方式的提出,不是隨隨便便就提出的,新的架構(gòu)的設(shè)計和提出首先必須要明白你要解決哪些問題,而且也不要”過度設(shè)計”。(這個過程很難,很多時候需要權(quán)衡,所以作為架構(gòu)的設(shè)計者,權(quán)衡的思想很重要:在時間,資源,資金等都要考慮)?赡茉谄鸪鯐䥇⒖匆恍﹦e的設(shè)計架構(gòu),甚至是模仿它們,但是隨著思考的深入,那些表象的東西就會逐漸的被拋除。
同時也開始設(shè)計的時候,沒有說一定要立刻就要設(shè)計出一個很強(qiáng)大的東西出來,對架構(gòu)設(shè)計的能力也是在慢慢的演化和思考過程中提升的。
2. 對數(shù)據(jù)訪問層的思考
在解釋為什么架構(gòu)要像上面那副圖進(jìn)行設(shè)計之前,我們首先來討論一些之前項目問題:
對于數(shù)據(jù)訪問層(DAL)的問題:
1. DAL很依賴Linq生成的實體。可以說在之前的項目中,在數(shù)據(jù)訪問層能夠使用的技術(shù)就已經(jīng)”釘死”在了Linq上。這里不是說Linq不好,而且強(qiáng)調(diào)在DAL的訪問技術(shù)的選擇的余地已經(jīng)沒有了,不靈活。
a) 在架構(gòu)的設(shè)計過程中,就需要考慮到以后技術(shù)的轉(zhuǎn)變和更換,可能在項目A中采用Linq to sql,但是在項目B中就采用Entity Framework。因為我們的目的就是要開發(fā)一個比較靈活的通用架構(gòu),能夠支持不同就數(shù)據(jù)訪問技術(shù)。可能以后的項目都只是用一種訪問技術(shù),但是最為架構(gòu)的設(shè)計者,特別是希望從架構(gòu)最后能夠演化到Framework, 那就要為更換技術(shù)預(yù)留接口。
2. 在DAL中沒有很多的異常處理等底層機(jī)制。
a) 在項目設(shè)計的過程中,有些底層的機(jī)制是幾乎每一個邏輯都要用到的:異常處理,日志跟蹤,緩存機(jī)制,事務(wù)機(jī)制,安全驗證機(jī)制。當(dāng)時在之前的DAL中是沒有的?赡墁F(xiàn)在你認(rèn)為有些機(jī)制不是需要的,或者不明白為什么需要。
因為一個強(qiáng)大的軟件,不能隨隨便便就因為某些異;蛘咤e誤就崩潰了,也不可能就是一大堆代碼的堆砌。上面所提到的有些機(jī)制:如異常,日志,它們的價值很多時候在軟件維護(hù)的時候體驗出來。根據(jù)日志記錄,可以查處軟件哪里出了問題,如是數(shù)據(jù)庫斷了,還是哪個操作流程導(dǎo)致了問題。 而有些機(jī)制是在運(yùn)行時體現(xiàn)價值,如緩存,驗證,事務(wù)。
但是在使用這些底層機(jī)制的時候也要權(quán)衡,綜合的考慮,如緩存機(jī)制,就得明白那些數(shù)據(jù)要緩存,緩存在哪里,緩存數(shù)據(jù)時候要加密,緩存多長時間,如何刷新過期了的數(shù)據(jù)。等等,很多東西要考慮。
3. 數(shù)據(jù)來源僅僅只是考慮了數(shù)據(jù)庫。其實這個問題不是之前的項目的一個問題,但是這里有必要提出。
a) 一般在我們開發(fā)項目的時候,數(shù)據(jù)的來源很多時候都是數(shù)據(jù)庫,我們直接操作數(shù)據(jù)庫就行了,但是還得考慮一個問題:如果我們的項目沒有自己的數(shù)據(jù)庫,我們的數(shù)據(jù)來源是來自其他的公司或者服務(wù)接口,怎么辦?作為架構(gòu)的設(shè)計者,是需要考慮這些的。
出處:博客園
責(zé)任編輯:bluehearts
上一頁 下一頁 .NET 分布式架構(gòu)開發(fā)實戰(zhàn)(二) [2]
◎進(jìn)入論壇網(wǎng)絡(luò)編程版塊參加討論
|