.NET項(xiàng)目開發(fā)企業(yè)郵箱系統(tǒng)之項(xiàng)目說明
最近終于輕松下來了。帶了兩年新人,實(shí)實(shí)在在的體驗(yàn)到了做為項(xiàng)目經(jīng)理+技術(shù)經(jīng)理+測(cè)試經(jīng)理+技術(shù)支持工程師同時(shí)兼任程序員得酸甜苦辣。或許我這個(gè)人就是個(gè)勞碌的命,一旦閑下來,反而覺得很別扭。當(dāng)然了,或者這是程序員的通病吧,呵呵~。在律所工作的三年中,先后接觸了幾個(gè)企業(yè)郵箱系統(tǒng),大的小的,知名的不知名的,每個(gè)都讓律所不太滿意,趁著閑下來的這段時(shí)間,打算編寫個(gè)這方面的程序,把以前遇到的系統(tǒng)中不滿意的地方盡可能解決掉,同時(shí)因?yàn)槠髽I(yè)郵箱程序的特殊性,它既包含B/S的內(nèi)容,也包含單機(jī)軟件的內(nèi)容,同時(shí)包含一些系統(tǒng)底層的知識(shí),所以也很合適作為新人培訓(xùn)的案例教程,等把這個(gè)系列寫完,再好好整理整理,就可以作為律所內(nèi)部培訓(xùn)使用了。好了,廢話不多說了,下面介紹下關(guān)于程序的一些想法。
程序本身要作為案例教學(xué),而且面對(duì)的對(duì)象是初入行的新人,所以在程序注釋和解釋方面會(huì)盡可能詳細(xì)。企業(yè)郵箱基本上可以算是個(gè)大型項(xiàng)目了。所以程序考慮分層架構(gòu),這樣方便擴(kuò)展。程序本身包含了單機(jī)軟件和B/S結(jié)構(gòu)的內(nèi)容,對(duì)于B/S方面,程序會(huì)嚴(yán)格遵守Web標(biāo)準(zhǔn)。對(duì)于單機(jī)軟件方面,程序會(huì)考慮多語言配置。程序會(huì)融入自定義標(biāo)簽調(diào)用、xslt、xml、模板、靜態(tài)化等應(yīng)用,并提供完整例子。因?yàn)槌绦虮旧韺儆诖笮晚?xiàng)目,所以對(duì)可維護(hù)性和性能會(huì)有著重考慮。但是,我個(gè)人信奉一句話:程序首先是寫給人看,其次才是寫給機(jī)器看!所以程序會(huì)在性能與易讀性方面做出綜合取舍。下面介紹一下程序的基本框架:
圖一、程序框架結(jié)構(gòu)
程序命名為《易迅企業(yè)郵箱系統(tǒng)》,取意簡(jiǎn)單容易、迅捷高效。程序基于.NET4.0 Framework, 開發(fā)工具及輔助數(shù)據(jù)庫(kù)為:VS2010+SQLServer2008,下面詳細(xì)介紹程序各個(gè)層的目的:
EasyFastMail.BLL——業(yè)務(wù)邏輯層。主要負(fù)責(zé)程序的業(yè)務(wù)邏輯判斷。注意:業(yè)務(wù)邏輯不是程序邏輯,盡管他們?cè)诤芏鄷r(shí)候很相似,甚至于融為一體。程序邏輯是指一個(gè)操作是否成功,例如,刪除一條數(shù)據(jù),根據(jù)數(shù)據(jù)庫(kù)的返回值判斷刪除是否成功,這個(gè)屬于程序邏輯,他判斷的是程序的某項(xiàng)具體操作是否成功。但是在復(fù)雜環(huán)境下,刪除數(shù)據(jù)的同時(shí)需要考慮很多問題,而不僅僅是刪除數(shù)據(jù)這么簡(jiǎn)單。以刪除用戶這個(gè)常用功能為例:在企業(yè)OA中,入職即增加用戶,離職即刪除用戶是難以滿足企業(yè)的需要的,在企業(yè)中,離職人員管理也是人力資源部的一項(xiàng)重要工作。(例如領(lǐng)導(dǎo)層正在討論一個(gè)項(xiàng)目說明,大家認(rèn)為整體上是可行的,有利潤(rùn)前景,但是一些細(xì)節(jié)上的東西,書面報(bào)告記載的不是很清楚,這時(shí)就需要聯(lián)系報(bào)告的撰寫人或者項(xiàng)目的負(fù)責(zé)人來做說明,假如該人已離職,在絕大數(shù)情況下,因?yàn)檫z忘或者其他原因,他不可能會(huì)給他的繼任者把每一項(xiàng)工作都交代的十分詳盡清楚,所以這時(shí)就需要聯(lián)系該人,如果程序中設(shè)置,離職即刪除用戶,那么很可能就無法再次聯(lián)系上該人,這樣會(huì)造成項(xiàng)目擱置或者其他的損失)離職操作應(yīng)該刪除用戶表中的數(shù)據(jù),同時(shí)將該數(shù)據(jù)保存到離職人員表中,并且這兩項(xiàng)操作應(yīng)該置于一個(gè)事物中,保證同時(shí)成功,否則回滾事物并且提示操作者。這樣看起來,刪除用戶這個(gè)操作應(yīng)該包含兩步:1、刪除用戶表中的數(shù)據(jù);2、將該數(shù)據(jù)插入到離職人員表中。這兩個(gè)操作合起來即程序的業(yè)務(wù)邏輯。概括來說,程序的業(yè)務(wù)邏輯有時(shí)候和程序邏輯完全重合,有時(shí)候會(huì)同時(shí)包含幾個(gè)程序邏輯。
EasyFastMail.Cache——程序的緩存層。緩存對(duì)于程序尤其是大型程序來說怎么強(qiáng)調(diào)都不為過,它能很大程度上提升程序的性能。這點(diǎn)大家一定要重視再重視,我曾經(jīng)親眼見過因?yàn)橛辛撕侠淼木彺嬖O(shè)計(jì),致使程序性能飆升百分之七八百的案例。
EasyFastMail.Common——公共類庫(kù)組件,主要為各層之間共用模塊及其他輔助工具類庫(kù)。
EasyFastMail.Model——程序的模型層。Model用于傳遞數(shù)據(jù),他即可以和數(shù)據(jù)庫(kù)表完全對(duì)應(yīng),也可以適當(dāng)增加或者刪除字段。如何設(shè)計(jì),根據(jù)實(shí)際情況去取舍,只要達(dá)到傳遞數(shù)據(jù)的目的即可。例如添加用戶功能中,用戶包含姓名、登錄名、年齡、性別等等,如果沒有Model,實(shí)現(xiàn)該功能需要的對(duì)應(yīng)方法就需要接收很多參數(shù),這樣很容易因?yàn)榇中拇笠庵率钩绦虺霈F(xiàn)bug,并且如果想實(shí)現(xiàn)批量增加,則更難處理。而如果有了Model,處理起來就簡(jiǎn)單多了,直接給Model賦值,傳遞給對(duì)應(yīng)的方法,該方法根據(jù)需要,從Model中取值即可。
EasyFastMail.SQLServerDAL——程序的數(shù)據(jù)庫(kù)操作層。注意,不要在數(shù)據(jù)庫(kù)操作層中做邏輯判斷,該層的職責(zé)是增、刪、改、查并提供返回值供調(diào)用層進(jìn)行判斷。
EasyFastMail.Web——程序的頁面展示層(B/S結(jié)構(gòu))。展示層的職責(zé)是收集、展示數(shù)據(jù)及驗(yàn)證收集的數(shù)據(jù)是否合法。本層是程序混亂的重災(zāi)區(qū),新人程序員很容在犯的一個(gè)錯(cuò)誤就是在該層包含太多太多的邏輯及數(shù)據(jù)操作。這樣做就失去了分層的目的,致使程序的可維護(hù)性、可擴(kuò)展性成為一句空話。請(qǐng)大家一定注意這點(diǎn)。
EasyFastMail.WinForm——程序的展示層(單機(jī)軟件或者C/S結(jié)構(gòu))。注意事項(xiàng)同上。
原文鏈接:http://www.cnblogs.com/cnuusw/archive/2011/07/10/2102445.html
【編輯推薦】