网上选课系统心得
沒什么可說的,代碼覺得也都是老一套,標準的COM+三層結構,只說說做后的感想:
1.傳統和三層結構方案差別:
傳統方法: 客戶--ADO.NET--數據庫
用戶通過瀏覽器來訪問WEB站點,利用ADO.NET實現對數據庫的連接和操作,此時每個用戶保持著一個對數據庫的連接。這樣的方案存在明顯的不足,由于打開一個連接所消耗的資源是相當昂貴的,所以一旦當用戶人數大量增加時,WEB服務器的吞吐量會受到嚴重影響,其性能會大大降低。
三層結構: 客戶端--Web服務器--COM+應用層--數據庫
在上面的基礎上,再增加一層COM+應用,把對數據庫的所有直接操作封裝成一個組件類,用COM+的核心服務(對象池、即時激活等)來包裝,從而把對數據庫的連接、操作等活動都交給了COM+應用層。
對象池:利用對象池的目的是對象共享,創建新對象的第一個客戶會降低性能(因為他要進行打開數據庫操作),但只要客戶釋放對象,對象就返回到對象池中。由于不必等待對象的創建,需要對象實例的下一個客戶就得到第一個客戶創建的實例。有了COM+的對象池服務,可以實現對象的共享,通過在用戶人數大量增加時增加最大和最小共享容量就可以有管理地添加組件(也就是資源)。容許添加在共享的組件越多,能夠服務的客戶就越多。
即時激活:JITA對可共享對象的可伸縮性具有重要的效果。JITA容許在方法調用后使對象馬上鈍化,而在下一個方法調用時,再將其激活。由于客戶再方法調用之間不能正確控制組件,組件就被釋放回對象池中。一旦組件回到共享池,它就變得被其他客戶可用。
2.COM+組件的一般三步聲明法:
?[Transaction(TransactionOption.RequiresNew)]
?[ObjectPooling(true, 5, 100)]
?[JustInTimeActivation(true)]
同時,要用SN生成強名并引用。
方法之前的[AutoComplete]用于聲明方法級別的事務。
3.邏輯層類的方法的調用和返回類型都是要根據程序中的具體而定,千萬不要有一個標準。
4.如果有DataSet,不管是查詢還是篩選,都要盡量使用對DATASET的操作,不要操作數據庫,這不僅能大大提高性能,而且也使邏輯層的代碼更加簡潔(不用實現很多細微的數據庫操作功能)。
比如查詢:
DataRow[] rows = ds.Tables[0].Select("cname='" + this.ListBox1.SelectedItem.Text + "'");
總結
- 上一篇: [怀念]浮沉
- 下一篇: C#写的一个代码生成器