簡單說一下我對這個(gè)CRM系統(tǒng)的設(shè)計(jì)方案哦
一、開發(fā)基礎(chǔ)選用 開發(fā)基礎(chǔ)包括數(shù)據(jù)訪問,監(jiān)控跟蹤,異常處理,日志記錄,公共函數(shù)等東西,每個(gè)系統(tǒng)一般都不是從零開始做的,都有個(gè)基礎(chǔ)架構(gòu)的,有的可能功能少一些,但是數(shù)據(jù)訪問是必須的,我列舉一下備選的方法供大家討論。 1、聽堂的SPL http://tintown.cnblogs.com/archive/2005/04/11/135582.html 評價(jià):簡單易用,功能也不弱,能有效提高開發(fā)效率,但是處理存儲過程上還有些缺乏自動(dòng)化,而且我感覺有點(diǎn)兒爭議的是它沒有返回IDataReader的接口是不是個(gè)缺陷,當(dāng)然作者有自己的考慮。 2、雙魚座的Kanas.Net http://www.cnblogs.com/Barton131420/articles/192277.html 評價(jià):雙魚的這個(gè)東西我是在好幾年前CSDN的帖子里看到的,功能很全面,也不知道他讓不讓用,估計(jì)采用的話學(xué)習(xí)成本會提高。CSDN的那個(gè)帖子地址如下,里面有幾個(gè)人對ORM的討論 http://search.csdn.net/Expert/topic/2519/2519108.xml?temp=.491192 3.《ASP.NET電子商務(wù)高級編程》里凱文.霍夫曼寫的.NET CMP框架 http://www./computers/common/info.asp?id=14273 http://support./books.asp?bID=1861008031&s=0 評價(jià):可以有效減少代碼數(shù)量,錯(cuò)誤處理,檢測跟蹤也都集成了進(jìn)去,是一個(gè)很靈活的框架,存儲過程處理非常方便,而且使用了托管容器的概念,使業(yè)務(wù)層代碼可以不關(guān)心數(shù)據(jù)訪問層的代碼。 4.《ASP.NET企業(yè)應(yīng)用高級編程》里的WEO架構(gòu)以及object builder代碼生成工具 http://www./computers/common/info.asp?id=7385 http://support./books.asp?bID=1861005911&s=0 評價(jià):有配套的代碼生成器,功能很強(qiáng)大,能生成好多代碼,在項(xiàng)目里同步一下就可以更新,自動(dòng)生成的CRUD操作和對存儲過程的操作都考慮的很周全,數(shù)據(jù)訪問默認(rèn)已經(jīng)支持了并發(fā)處理和多層處理,可以方便remoting的調(diào)用。內(nèi)置性能計(jì)數(shù)器等處理。 5.微軟的EL DAAB大家都很熟悉了,但是我卻沒怎么用過,微軟的這套應(yīng)用程序塊使用了策略的模式,使用起來很方便,耦合性也小,但在開發(fā)效率上不如以上幾個(gè)框架考慮的多感覺。
二、架構(gòu)選擇 為了保證軟件最終的可伸縮性,打算使用多層架構(gòu)來開發(fā)。業(yè)務(wù)層代碼,表示層,數(shù)據(jù)庫層都可以分別運(yùn)行在不同的機(jī)器上。表示層可以使用智能客戶端,WEBFORM,移動(dòng)工具等,業(yè)務(wù)層以remoting和web services形式發(fā)布,數(shù)據(jù)庫采用ms sqlserver。 具體我是這樣考慮的像需要報(bào)表,圖表,以及管理的功能都做成智能客戶端來實(shí)現(xiàn),因?yàn)檫@些功能用瀏覽器來實(shí)現(xiàn)需要費(fèi)很大的周折,我的意思是對使用這些功能的客戶部署一個(gè)引導(dǎo)的小程序,也就是application browser,然后這個(gè)應(yīng)用程序?yàn)g覽器通過一個(gè)web服務(wù)來獲取可用的功能,以及執(zhí)行這些功能的程序集的位置,從一臺單獨(dú)的web服務(wù)器上下載程序集緩存到本地來執(zhí)行客戶端邏輯。這樣給這些客戶端發(fā)布新功能的時(shí)候可以更改這個(gè)web服務(wù),通過這個(gè)web服務(wù)像智能客戶端發(fā)布新功能,自動(dòng)下載,執(zhí)行。這些桌面程序執(zhí)行的時(shí)候是遠(yuǎn)程創(chuàng)建remoting對象,然后調(diào)用這些對象的方法,而remoting對象可以駐留在另一臺單獨(dú)的應(yīng)用程序上。 然后大多數(shù)功能通過asp.net來實(shí)現(xiàn),asp.net的web服務(wù)器也是調(diào)用remoting服務(wù)器上的對象來運(yùn)行業(yè)務(wù)邏輯,然后生成通過webform來和客戶進(jìn)行交互。 還需要一個(gè)移動(dòng)應(yīng)用程序,每個(gè)客戶可以通過PDA或其它設(shè)備查看自己的客戶,以及客戶的手機(jī),住址等信息,方便他們用移動(dòng)工具溝通,加大銷售的機(jī)會。 基本上架構(gòu)上我就是這樣考慮的,當(dāng)然所有的服務(wù)可以在一臺機(jī)器上運(yùn)行,但是也為以后擴(kuò)展提供可伸縮性。
三、身份驗(yàn)證和授權(quán) 因?yàn)槌绦虮旧碇С侄嘟缑?,所以我打算身份?yàn)證用一個(gè)web服務(wù)來執(zhí)行,這樣在桌面程序,asp.net,移動(dòng)控件都可以調(diào)用web服務(wù)來進(jìn)行身份驗(yàn)證并獲取令牌,令牌也可以串行化并在層間傳遞,當(dāng)然這樣的話需要用到xml簽名,xml加密,對客戶端IP驗(yàn)證等一些列增強(qiáng)安全性的措施。
四、管理 管理工具分為兩種,一種是對業(yè)務(wù)的管理,比如修改權(quán)限,添加產(chǎn)品,添加客戶等,這些管理功能最好是使用windows驗(yàn)證方式在局網(wǎng)內(nèi)進(jìn)行管理,或者是使用webform遠(yuǎn)程管理的話需要使用一些增強(qiáng)的安全性,比如說https等。還有一種管理是對remoting服務(wù)器的跟蹤和管理,比如停止windows服務(wù),查看對象實(shí)例化的個(gè)數(shù)等。這些管理行為想做個(gè)桌面程序來管理服務(wù)進(jìn)程,使用那個(gè)那個(gè)什么singleg模式,好像叫單件模式,這樣可以遠(yuǎn)程停止,啟動(dòng),查看remoting的運(yùn)行裝款以及windows服務(wù)。最好是可以集成到微軟的MMC里面
五、合理使用代碼生成器,第三方控件,模塊,工具 比如說nunit,nant這類的東西最好能利用起來,懶是程序員的美德,能省事咱就省事,當(dāng)然是保證安全和質(zhì)量的情況下??丶矫嬉脖M量用已經(jīng)可用的控件,不自己開發(fā)。模塊呢,像身份驗(yàn)證啦這些都是通用的,可以拷貝一些代碼進(jìn)來,進(jìn)行測試后投入使用。代碼生成器大多靈活性不夠,可以使用我的wawacodepro或者其它有些支持模板的代碼生成器來減少重復(fù)性代碼的手工輸入。
六、自動(dòng)化處理,異步處理,分布式事務(wù)管理 因?yàn)槭褂昧硕鄬蛹軜?gòu),就得考慮到網(wǎng)絡(luò)阻塞的情況,所以我們得使用一些異步處理方式以及自動(dòng)化處理程序,比如說把添加的客戶生成的數(shù)據(jù)先串行化成xml,然后保存在一個(gè)目錄里,然后通過一個(gè)windows服務(wù)監(jiān)視這個(gè)目錄處理里面的XML數(shù)據(jù)并放入數(shù)據(jù)庫里,使用一些重試隊(duì)列來處理意外情況,如果加入重試隊(duì)列2次以上就放入停止隊(duì)列里面。這種方法經(jīng)常用在訂單處理里面,我們需要的話也可以把部分邏輯使用這個(gè)方法處理。如果到時(shí)候架構(gòu)很復(fù)雜的話需要用一些分布式事務(wù)管理,來保證業(yè)務(wù)數(shù)據(jù)的完整性,這個(gè)先考慮進(jìn)去。
七、自動(dòng)部署和代碼訪問安全 這是.NET的特性,使用了智能客戶端,這些都要考慮一下,不能為了使用智能客戶端而增加了部署的麻煩和降低了安全級別。
八、計(jì)數(shù)器 這些東西要集成到管理工具里面,一般使用.NET的特有的幾個(gè)計(jì)數(shù)器就可以,主要死活用性能(資源)計(jì)數(shù)器,用量計(jì)數(shù)器,頻率計(jì)數(shù)器,這些在構(gòu)建.net remoting對象的時(shí)候需要加進(jìn)去,可以讓管理工具查看某個(gè)remoting方法一分鐘調(diào)用了多少次,某個(gè)remtoing對象有多少個(gè)實(shí)例,可以查看CLR運(yùn)行占用的資源等
九、異常報(bào)告,事件日志,調(diào)試跟蹤,負(fù)載平衡 如果是在智能客戶端上發(fā)生了異常要把異常用web服務(wù)或者電子郵件發(fā)送到異常管理人員,如果是服務(wù)器上發(fā)生了異常也要用web服務(wù)把異常報(bào)告到集成的地方,我認(rèn)為web服務(wù)來報(bào)告異常是很好的,智能客戶端可以加入一些在線崩潰分析的功能,報(bào)告異常的時(shí)候另外要報(bào)告一些額外的信息,比如說當(dāng)前windows登陸用戶名,磁盤剩余控件,進(jìn)程ID等信息,便于分析人員分析鼓掌原因。
使用事件日志是一種過時(shí)的技術(shù),還需要人為的去查看錯(cuò)誤記錄。但是我們可以雙管齊下,日志可以讓系統(tǒng)管理員得到一些幫助。 在開發(fā)階段debug是很有用的,可以幫助開發(fā)人員分析程序?yàn)槭裁闯鲥e(cuò),而trace是程序正式運(yùn)行后出現(xiàn)了問題,可以啟用跟蹤來查看變量的輸出,用來分析程序的運(yùn)行情況,這些都要考慮進(jìn)去。 最后負(fù)載平衡,我想要對循環(huán)法給予支持,因?yàn)橹恍枰獛仔写a就可以實(shí)現(xiàn)。而對單點(diǎn)故障法暫時(shí)不用考慮,因?yàn)樾枰猘pplication server或者硬件的支持
十、最后是易用性問題
為了提高用戶體驗(yàn),在界面設(shè)計(jì)上要多為客戶考慮一些,顏色,布局,使用方便,每日提示,幫助,狀態(tài)欄提示,習(xí)慣性調(diào)查,使用首選項(xiàng)等都要提供。
基本上就是這些吧,我明天要回鄉(xiāng)下,參加項(xiàng)目的朋友先看看我的方案,給點(diǎn)兒意見。
|