新聞中心
2009年8月駐站專家周金橋老師簡介

周金橋,網(wǎng)名周公,微軟2008年7月MVP,專家堂成員。微軟山西.NET俱樂部技術(shù)負(fù)責(zé)人。超過6年的Web開發(fā)經(jīng)驗,擅長ASP.NET、程序性能和安全優(yōu)化。
點擊進(jìn)入活動原帖
經(jīng)典問題一
從工程的角度上說,我認(rèn)為代碼的可維護(hù)性與可讀性是極其重要的,因此我認(rèn)為在開發(fā)過程中應(yīng)該盡可能采用代碼量少的解決方案。對于CRUD類的需求,asp.net提供的數(shù)據(jù)控件和數(shù)據(jù)源控件正好滿足我的要求。
我的系統(tǒng)設(shè)計完全面向?qū)ο?,在使用?shù)據(jù)控件的時候就有出一點問題,請指教。舉例來說:假設(shè)有一個訂單系統(tǒng)
訂單冊O(shè)rderRegister負(fù)責(zé)對訂單進(jìn)行CRUD操作,現(xiàn)在我要實現(xiàn)創(chuàng)建訂單的功能。
ASP.NET的數(shù)據(jù)控件對于平面對象(只包含基本類型屬性的對象)支持的很好,而對于我這種立體型對象設(shè)計顯示支持的不太好。我現(xiàn)在采用的方式是在數(shù)據(jù)控件中再嵌套一個數(shù)據(jù)控件。外層用于操作Order,內(nèi)層用于操作OrderItem。但在實際開發(fā)中有非常多的細(xì)節(jié)問題需要處理。我希望可以了解到,您對這種設(shè)計,在頁面上是如何處理的?
駐站專家周金橋老師精彩回答:
這種情況實際中不少見,不過說實在話我從來不在真實項目中使用數(shù)據(jù)源控件(數(shù)據(jù)源控件是一種針對初學(xué)者的、小型的網(wǎng)站使用),復(fù)雜的情況下盡可能使用Repeater數(shù)據(jù)綁定控件或者干脆不用任何數(shù)據(jù)綁定控件。
在某些操作過程中可能會需要對兩個甚至兩個以上的數(shù)據(jù)表進(jìn)行操作,針對這種情況我一般是采用存儲過程,這樣可以保證一致性:要么所有的操作都成功,要么都不成功(使用事務(wù))。
至于查詢一般就使用視圖,這樣避免每次查詢時都要寫大量的SQL語句。
經(jīng)典問題二
有關(guān)屬性編輯框與Form.Designer.cs問題
控件通過屬性編輯框修改屬性后,是如何自動更新到Form.Designer.cs的?
駐站專家周金橋老師精彩回答:
通過屬性編輯框修改屬性之后,就會自動修改*.Designer.cs中的代碼,這部分代母具體位置就是位于
- #region Windows 窗體設(shè)計器生成的代碼
- ///
- /// 設(shè)計器支持所需的方法 - 不要
- /// 使用代碼編輯器修改此方法的內(nèi)容。
- ///
- private void InitializeComponent()
- {
- //控件屬性設(shè)置代碼
- }
- #endregion
在C#中不是有事件嗎?當(dāng)你在屬性編輯器中編輯屬性完成之后,就會激發(fā)一個事件,這樣就知道是哪個屬性發(fā)生了變化了,就可以在源代碼中修改相應(yīng)的源代碼的值了。當(dāng)然,我沒有看VS這個IDE的源代碼(實際上也不可能看到),但是我想他們大概是采用了類似的思路和方法。
有一個開源的C#編寫的C#的IDE,如果有興趣,你可以下載來看看,研究一下。
經(jīng)典問題三
我在項目中遇到一個奇怪的問題,今天加班弄了一天也沒有解決,郁悶死了,希望在這里能找到答案~~~
和數(shù)據(jù)量比較大有關(guān),我的一個aspx頁面在跑完服務(wù)器代碼后,過了7,8分鐘才顯示出內(nèi)容,有時甚至達(dá)到10分鐘,正常顯示后,畫面中有個'Save' 服務(wù)器按鈕,該按鈕有客戶端的clientclick事件和服務(wù)器端的onclick事件,我在點擊該按鈕后,跑了客戶端代碼后就直接跳出顯示一個 “the page cannot be displayed”的無法顯示的頁面了,當(dāng)然該頁面的屬性地址里顯示的還是"Save"時的頁面,即同一個頁面??蛻舳四_本中包含的內(nèi)容只是提示 confirm,是否要保存,是的話就返回true.
另外,我用數(shù)據(jù)量小一些的來測試,就是過了1,2分鐘就頁面就可以顯示數(shù)據(jù)的。點擊“Save”按鈕就沒問題,主要是出現(xiàn)問題的那個數(shù)據(jù),在點擊 “Save”時根本就沒跑服務(wù)器端的代碼,但是在***次加載該頁的時候,即page_load時,是有跑后臺代碼的,所以我真不知道問題是出在哪里了,是不是由于長時間響應(yīng)后才顯示頁面,導(dǎo)致了頁面的代碼丟失,無法提交數(shù)據(jù),所以出現(xiàn)了只跑了客戶端的代碼,而沒有跑服務(wù)器端代碼,然后直接顯示空白頁或是本身的一個"the page cannot be displayed" 無法顯示的頁面呢?
駐站專家周金橋老師精彩回答:
1、確認(rèn)是否利用了Page.IsPostBack屬性來區(qū)分頁面的***加載事件,實際上并不是每次都需要控件對因服務(wù)器控件的回傳事件導(dǎo)致頁面的加載進(jìn)行響應(yīng)的。
2、是否使用了正確的數(shù)據(jù)分頁機(jī)制。你提到數(shù)據(jù)量少時加載過程費時較短,我感覺似乎跟你的數(shù)據(jù)加載方式有關(guān)系??赡軘?shù)據(jù)量比較大,而你在顯示時不管需要不需要把全部數(shù)據(jù)都提取出來了,導(dǎo)致效率的降低。
請見我給有關(guān)文章數(shù)據(jù)分頁方面文章的鏈接:用AjaxPro實現(xiàn)無刷新翻頁效果及數(shù)據(jù)庫分頁技術(shù)介紹
在實際項目中經(jīng)常會遇到一個表里有幾K、幾M以上的數(shù)據(jù),而呈現(xiàn)給用戶時并不會一下子都顯示出來,所以都是分批展示給用戶,這樣一來可以減小網(wǎng)絡(luò)傳輸量,二來也減輕服務(wù)器壓力。
經(jīng)典問題四
想再問下在控件使用方面~特別是富控件的使用~周老師有沒有什么比較好的經(jīng)驗!還有周老師感覺在比較大的門戶類型項目中哪些控件***少用~或者不用~ ...
駐站專家周金橋老師精彩回答:
對于這個問題要看實際項目情況了,一般來說使用控件會降低對開發(fā)人員的要求(比如對HTML/CSS/JS等方面的要求),但是如果處理不當(dāng)有可能增加了服務(wù)器的處理負(fù)擔(dān)。
對于負(fù)責(zé)的富控件在實際項目中我們一般用得比較上,而是有經(jīng)驗豐富的程序員用HTML/CSS/JS來實現(xiàn)類型的效果,在開發(fā)過程中再根據(jù)實際要求輸出生成控件的那段代碼。在《ASP.NET夜話》中就有一個我用JS實現(xiàn)的類似于WinForm中的選項卡時效果的例子,就是我當(dāng)初寫的。
分享題目:2009年8月51CTO駐站專家周金橋老師精彩問答
文章來源:http://www.dlmjj.cn/article/dpdjscj.html


咨詢
建站咨詢
