網頁本身就有一個Page_load的事件,假設又拉了一個DropDownList,使用了
SelectedIndexChanged並enable了AutoPostBack,
想要做一個高彈性的使用者界面,然後又使用Session來儲存跨網頁的變數,每一個單
一網頁又為了縮短程式碼的因素,使用了各自的全域變數或者,放著跟Session一樣的
變數,更不用說還要使用QueryString來傳遞變數,程序執行完畢後要清除Session。還
好我還沒有用ViewState。
亂了,亂了,由此產生的各種變化可能有數十種,當調整能夠符合出一種狀況時,又造
成另外一個狀態產生錯誤,.net表面上要提供義大利麵條式的寫碼方式,卻在邏輯上造
成虛擬的義大利麵條。實質的義大利麵條式程式碼可以藉由看碼的方式直接觀測到,但
邏輯上的呢?就算對.net framework內Page_load、SelectedIndexChanged、PreRender
的等事件,觸發狀況與先後順序瞭若指掌,但是當狀況一複雜時。狀況超出個人大腦虛
擬化能力時,這時的寫出來的Code已經是無法使用了。而Web Server原生本來就不是用
這些視窗化的事件所組合而成,硬使用這些傳統視窗的事件來為Web應用程式寫Code,
過度設計與應用之後,生成這種邏輯式的義大利麵條。在過往使用ASP、PHP等不主動提
供這些事件的程式語言時,每一個事件都必須自己打造,也因此事件的數目不容易快速
增加,所以也很少有邏輯式的義大利麵條。
維持固定的複雜度,是寫出容易維護的Code,一個非常重要的條件。巢狀迴圈的深度、
變數的個數,如果是支援事件的framework,又牽扯到EVENT的複雜度。
最後這個專案,只有將複雜度降個幾階,最後程式才得以無蟲狀態結案。
沒有留言:
張貼留言