2012年1月28日 星期六

寫程式的原則


寫程式的原則...

1.一定要testing...每一行程式都要testing
  在除錯工具的 [工具]->[涵蓋日誌] 給它一個檔名,
  然後在 VFP 的 [工具] -> [範圍描述檔案] 就可以知道那些沒執行過了.

2.一定要善用 write one exectution anyplace的精神
  同邏輯的程式,能合併就合併,差異處用Flag來處理

3.Debug要發揮想像力....

4.在做版本管理時,在簽入時,可以加上注解,即可得知此版改了什麼

5.請先了解程式架構再下手寫程式,不要破壞原來的程式架構

6.胸有成竹,才下手寫程式,不要想到那,寫到那

7.細心的注意每一個小細節,不要只注意自己認為重要的點,程式不只要能用,而是要好用!

8.少用 messagebox() , 除非你要挑選是或否時才用.
 否則一定要用thisform.mess(),以符合程式架構

9.在寫程式時,要時時想到,如果資料量很大時,程式之效能是否
 會減低,甚至會無法運行!

10.請徹底了解何種狀況下VFP本地的Table會被佔用,而產生檔案被
   使用的狀況。

11.精讀SQL語法!了解如何寫SQL語法,效率才會高,了解Index及SQL
   執行的底層做法,以提昇SQL執行效率。

12.FeederModify Form 啟動時速度很慢, 要有習慣意識到程式剛起動時的速度, 不要讓
   太多資料在啟動時抓進來, 以免影響速度.

13.沒有針對畫面上的細節作測試的習慣, 像是畫面放大時, 相關元件沒跟著位移或放大, 對
   自己寫的程式, 沒有徹底破壞的決心及習慣.

14.一個 Column 下面除了有 Header 物件外, 不要有二個以上的其他物件

15.注意FORM中排板及設計原理的合理性!!在資料量大時,要考慮User使用操作
  上的便利性
   曾犯的錯誤~~
  設定保養及檢修週期功能, 要有查詢某個料架的功能, 否則愈來愈多資料時, 很難設定.

16.beforeopentable 這個 method , 要記得加入 thisformset.setstatus , 否則日期的格式跟其他 form 不同.

17.不合理的資料一定不可讓User輸入, 一定要防, Garbage in garbage out

18.系統內介面定義之文字要統一,不可讓User混淆
   我曾犯過的錯誤~~
   名詞不統一, 像是 menu 叫作 [料架維護及使用標準設計] , 但進入後的標題卻是 [ 設定維
   修及保養週期 ] , 然後內文卻是 [保養標準週期] 及 [檢查標準週期 ] , 同一個人寫的, 卻有
   三種文字表述, 要如何看得懂.

19.介面的一切資訊,必須依合理性,自動更新,以便利User操作
   曾犯過的錯誤~~
   料槽數 3 與明細應該產生互動關係, 當明細為 3 筆時, 料槽數應該自動為 3 , 這裡沒有連動
   料槽數沒變,也可以存檔,會形成問題!


20.要加強測試,不放過任何一種可能

21.每一個Form要設定User輸入的順序,方便User輸入資料

22.寫程式時,要寫的乾淨,不要留一些沒有用,被mark掉的東東,就算之前有bug的程式被mark掉,也要
  註明清楚!

23.在使用View時,View的生命週期盡量與Method同步,如果一個Method要呼叫另一個Method,而這另一
  個Method用到同一個view的資料,要傳入View name!
  要傳入View Name

24. a.要插程式前,先了解程式Structure
   b.再把要插入的程式邏輯順(整理)一次
   c.再把有相關的邏輯包裝為Method
     需要包裝為Method的地方...
     c.1:if/then/else, Do Case , Loop
     c.2:條件判斷式
   d.再檢查包裝的合理性
   以上這些方法...在寫的時候不一定能達成,因為需要經驗去體會
   (日本人把這樣的知識稱為:暗未知),加油!一定可以達成!
   在系統愈來愈大之後,物件導向化的程式設計理念就要愈強,不然程式
   將會走向失控狀態!


25.寫程式時,要採用預防性寫法!(這是我自己的體會),在寫某些程式碼A時,
   可能會因為其他程式碼B邏輯上的錯誤,使得這些程式碼A出現error,所以
   就會很肯定不會有這樣的狀況發生,也要在程式碼A中盡量加上防錯機制
   EX: IF USED('TV_VIEWNAME')
SELECT TV_VIEWNAME
USE IN TV_VIEWNAME
       ENDIF


26.寫程式時,不要寫死...可以拉出參數的,就拉出參數...

27.Method的介面一定要定義好,要把可能的傳入參數及回傳參數設想週全,不然等到開始寫了,程式中開始用
   到這個Method時,要改就不容易了,因為只要是參數改了,所有呼叫他的地方,都要改,所以要特別注意!