第一個投票的範例,還有很多的改善空間。
我們一起討論看看。
是否有哪些地方可以改善得更好?
有一位朋友一直默默地在給我建議,
不管是我的書本內容、Blog上的程式碼.....該如何改進? 每一次都因為他的指導,讓我更進步了。
不瞞各位說:前兩篇文章還是有缺失的,我們以第一個投票範例來說明好了
(請看:[習題]ASP.NET的 簡易投票區 #1 -- 長條圖(繪製圖表) )
缺失一: 採用這樣的資料表,第一次辦投票時,必須新增一筆記錄,
讓所有候選人的「得票數」都歸零。
否則第一次執行會出錯。
我的設計方法,是「每舉辦一次投票」當作一列記錄!
不然的話,就要寫一段判別式去處理,「如果」每一欄都是null值,就必須新增一筆歸零的紀錄。
缺失二:程式的執行效率不彰。
在第一個範例裡面,我們原本的寫法。
For i As Integer = 0 To (RadioButtonList1.Items.Count - 1)
If RadioButtonList1.Items(i).Selected Then
'--- 處理投票動作的 ADO.NET程式 (很長,在此省略)
Exit For '--完成後,脫離 For迴圈
End If
Next
如果改成下面這樣,會有何變化?
For i As Integer = 0 To (RadioButtonList1.Items.Count - 1)
If Not RadioButtonList1.Items(i).Selected Then
Continue For '--執行 For迴圈的下一輪
End If
'--- 處理投票動作的 ADO.NET程式 (很長,在此省略)
Exit For '--完成後,脫離 For迴圈
Next
因為第一個範例,是「單選」的投票。如果透過 For迴圈一個接一個的檢查,勢必浪費時間。
所以我寫了 Exit For,一旦投票成功,後續的選項就不需要再檢查了。(因為一人只能投一票)
上述的作法,跟原本的作法,各位可以比較一下,多少還是有差異的。
至少上面的新寫法,可讀性高得多。
缺失三:SQL指令的部份。
原本第一個範例的程式,事先撈出每一個候選人的得票數(Select指令)
然後把得票者的「票數加一」,回寫到DB裡面(Update指令)。......請看下面「灰底」的字,作了兩次資料存取的動作!
上述這兩個動作,可以簡化成一句:(改善後,請看紅字部份)
'************************************************
Dim Conn As New SqlConnection(WebConfigurationManager.ConnectionStrings("testConnectionString").ConnectionString)
Conn.Open() '---- 連結DB
'--比較爛的寫法--
'Dim dr As SqlDataReader = Nothing
'Dim cmd As SqlCommand = New SqlCommand("select top 1 * from Vote_1 order by id DESC", Conn)
'dr = cmd.ExecuteReader() '---- 執行SQL指令,取出每一位候選人的得票數
'dr.Read()
'Dim vote_no As Integer = dr.Item(i + 1)
'If Not (dr Is Nothing) Then
' cmd.Cancel()
' dr.Close()
'End If
'Dim Update_SQLstr As String = "Update Vote_1 set vote_" & (i + 1) & " = " & (vote_no + 1)
'-- 比較好的寫法,一行就改進了! --
Dim Update_SQLstr As String = "Update Vote_1 set vote_" & (i + 1) & " = vote_" & i & " + 1 where id in (select top 1 id from vote_1 order by id DESC)"
Dim cmd_vote As SqlCommand = New SqlCommand(Update_SQLstr, Conn)
cmd_vote.ExecuteNonQuery()
Conn.Close()
Conn.Dispose()
'************************************************
上述的紅字,採用的SQL寫法是「update 資料表 Set 欄位A = 欄位A+1」
缺失四:投票完成後的「長條圖」,"寬度"可能過長,畫面不美觀。
原本的作法,是把圖片的寬度(width)依照得票數來延長。
如果一個候選人,得票一萬。.......我的天啊!那麼一張「寬度一萬」的圖片,會把這個網頁撐開~~變得很醜很醜!
該怎麼改進呢?
( 本來想寫在書裡面,日後才公開的。 今天被抓包了,只好寫出來....哈哈~)
我的作法是:計算每一個候選人「得票率(%)」。
個人得票數 / 總投票數 = 得票率(%)
這個數學公式,小學生就會了。
因為改成%比例,所以大家的得票率就算是80%、10%、 5%.......。
把它放進圖片的寬度裡面,也不會出現圖片過長的缺失了。
例如: <img src="圖片1.gif" width="(得票率% * 100) * 100">這樣的寫法。 黃底的部份,可以依照實際狀況修改。
缺失五、前兩篇文章的範例,目前都預設「一次只進行一份投票」
如果要改成一次進行多筆投票也不難啦。 各位動動腦筋就能解了
=========================================================================
本範例與完整說明,已經改寫成書本內的文章,
並集結出書,收錄 在「[新書上市]ASP.NET專題實務 II(下集):範例應用與4.0新功能」
=========================================================================
講完了,
程式不光是會跑而已。 真的要改進、要精簡、要更順暢地執行......那是一門永無止盡的功夫。
最好的方法有兩個:
第一、隔一陣子再來回頭看看,因為自己有進步了,回頭看以前寫的程式,就會有很大的修改空間。
第二、請別人看。透過不同的思維,來思考同一件事,就會有討論與進步的空間囉。
這一連串的投票程式,最後有一個範例給大家參考。
就算看不懂,應該也能自己安裝起來用。....[習題]ASP.NET的 簡易投票區 #4 -- 自動化投票區!!
本系列的「投票區」範例,C#請由此下載:[習題][下載]ASP.NET的 簡易投票區 #5 --C#範例下載
今日值班正妹,白歆惠
這裡有酒商的發表會,白歆惠是主秀,有照片---- http://wine.u-car.com.tw/winedetail.asp?articleid=99
我將思想傳授他人, 他人之所得,亦無損於我之所有;
猶如一人以我的燭火點燭,光亮與他同在,我卻不因此身處黑暗。----Thomas Jefferson
線上課程教學,遠距教學 (Web Form 約 51hr) https://dotblogs.com.tw/mis2000lab/2016/02/01/aspnet_online_learning_distance_education_VS2015
線上課程教學,遠距教學 (ASP.NET MVC 約 140hr) https://dotblogs.com.tw/mis2000lab/2018/08/14/ASPnet_MVC_Online_Learning_MIS2000Lab
寫信給我,不要私訊 -- mis2000lab (at) yahoo.com.tw 或 school (at) mis2000lab.net
(1) 第一天 ASP.NET MVC5 完整影片(5.5小時 / .NET 4.x版)免費試聽。影片 https://youtu.be/9spaHik87-A
(2) 第一天 ASP.NET Core MVC 完整影片(3小時 / .NET Core 6.0~8.0)免費試聽。影片 https://youtu.be/TSmwpT-Bx4I
[學員感言] mis2000lab課程評價 - ASP.NET MVC , WebForm 。 https://mis2000lab.medium.com/%E5%AD%B8%E5%93%A1%E6%84%9F%E8%A8%80-mis2000lab%E8%AA%B2%E7%A8%8B%E8%A9%95%E5%83%B9-asp-net-mvc-webform-77903ce9680b
ASP.NET遠距教學、線上課程(Web Form + MVC)。 第一天課程, "完整" 試聽。
......... facebook社團 https://www.facebook.com/mis2000lab ......................
......... YouTube (ASP.NET) 線上教學影片 https://www.youtube.com/channel/UC6IPPf6tvsNG8zX3u1LddvA/
Blog文章 "附的範例" 無法下載,請看 https://dotblogs.com.tw/mis2000lab/2016/03/14/2008_2015_mis2000lab_sample_download
請看我們的「售後服務」範圍(嚴格認定)。
......................................................................................................................................................
ASP.NET MVC => .NET Core MVC 線上教學 ...... 第一天課程 完整內容 "免費"讓您評估 / 試聽
[遠距教學、教學影片] ASP.NET (Web Form) 課程 上線了!MIS2000Lab.主講 事先錄好的影片,並非上課側錄! 觀看時,有如「一對一」面對面講課。