實戰專案分析(二)

2021-06-28 03:06:56 字數 2090 閱讀 1951

4.

強型別dataset

上面講到了業務物件和強型別dataset兩種領域模型的使用問題。其實強型別dataset是.net中很好的一種方案,它整合了資料庫和物件導向兩種優點,如果使用的好的話,會事半功倍,但使用不好的話,麻煩也很大。

在本系統中,強型別dataset被賦予很多使命:從資料庫中獲取資訊(資料訪問層)、業務處理(業務邏輯層)和資料展現(展現層),貫穿了整個系統。這樣就使得整個系統對強型別dataset的資料結構非常依賴,一旦資料庫發生變化,所有的**(從資料訪問到展現層)都要修改**來。並且最要命的是強型別dataset可以自動感知資料庫的變化,自動更新同步。試想,如果你是這個系統的編碼人員,會不會時時都提心吊膽呢?

很顯然,這是一種糟糕的設計。在分層結構中,任何資料結構都不能貫穿始終,特別是與資料庫結構。這回帶來難以置信的麻煩。分層,其實就是要隔離這種變化給系統帶來的連鎖反應。使底層的修改不影響到頂層,反之亦然。

當然這是不是意味著強型別dataset就不能使用了呢?當然不是的。強型別dataset是非常好的連線資料訪問層和業務邏輯層的紐帶,因為它既有資料庫結構又有物件特性。所以,只要我們能在兩個層次中各自遮蔽細節,依賴於抽象而不是實現,強型別dataset就可以在系統中發揮重要的作用。

5.

展現層太臃腫

本系統的很大一部分ui都是b/s的,採用asp.net構建。但我發現很多的webpage中包含有大量的介面邏輯和業務邏輯,基本每個webpage的**都在幾百行,有點甚至上千行。試想,這樣的ui維護起來…

對於每乙個開發者來說,大概都經歷過這種痛苦,為了資料庫的乙個欄位的修改,要從底層到頂層,全部修改一便,而且ui的修改是最麻煩的,往往是越改越煩!

其實對於ui的設計模式已經很成熟了,大家都知道mvc模式吧。就是乙個很成熟,很實用的ui設計模式。另外還有mvp模式,這個是mvc的基礎之上提出來的,跟mvc思想相同,但細節上有所不同而已。mvc模式網上有很多的資料,也有很多有名的應用案例。mvp則被廣泛應用在微軟p&p團隊的很多專案中,諸如:software factory系列中都有應用。

下面是mvc模式和mvp模式的對比:

另外,關於兩種模式的詳細對比,可以參考另一位mvp:treelee的文章:

asp.net mvc framework與wcsf中mvp模式之小小比較。

6.

自定義事務

.net framework 2.0中內建了對事務的支援,不但可以管理程序內的事務(包括sqlserver事務),還可以自動提公升至msdtc來管理分布式事務(包括wcf事務)。所以我們無需再編寫任何事物的管理**。

這樣不僅需要花費精力維護transactioncontext類,管理事務的執行,也使資料訪問介面變的很複雜,臃腫。

其實我們完全可以利用transactionscope這一.net framework2.0中的事務處理類還管理事務。最簡單的方式是:

using(transactionscope cpe = new transcationscope())

這樣就可以自動提交和回滾事務了,而且可以根據實際情況,如果其中某個方法呼叫了分布式事務的話,可以自動公升級為msdtc事務。

關於如何使用.net framework2.0中的事務功能,可以參考:introducing system.transactions in the .net framework 2.0(

7.

其它問題

還有一些其它的小問題,雖然不涉及到系統架構,但也會帶來一些負面的影響,包括:

a. **重複

a)很多資料查詢方法功能相同,只是返回的資料「格式」

不同(有的返回dataset,有的返回datarow,有的返回實體物件),為了呼叫方便,做了很多過載的方法,但沒有考慮**重複利用,造成大量的**冗餘。

b. 公共模組

a)設計者把系統中使用到的公共**和列舉等等組織在一起,放在乙個檔案中,為各個專案所使用。其實這本來很好,但是我卻發現,公共模組同時被三個層次引用,這樣也是很不好的。這樣會使得系統的分層結構遭到破壞,公共模組難於理解和使用。應該把屬於各層專屬使用的功能整合到各自的層中,每個層中設乙個公共模組,這樣既保障了分層的清晰,同時又很好地規劃了公共模組。

spring mvc 專案分析

分包 controller dao dao.impl service service.impl model util 資料校驗 資料轉換 資料計算等 在model包新建乙個page類以便分頁操作 建立乙個servicemanager來管理service 配置檔案 分三個 hibernate 資料來源...

DTMF VAD 專案分析

這一專案是準確的找出dtmf訊號的起點,當檢測到後,觸發dtmf decoder,對此後接收的資料進行解碼,等到相應的撥號鍵值。1.分析輸入訊號特徵 訊號是dtmf訊號加通道中的電路雜訊,現初步分析,這背景雜訊是高斯背景雜訊,這種雜訊好在對dtmf頻率特性損失不是很大,這樣問題會好解決一點。2.訊號...

專案分析 PLUG

plug過程 1.init plug define init plug plug initplug g initplug true 共享記憶體資料結構 struct plugsharememory inline void createsharememory i plugmodulemanage pm...