新手工程師的準則

良好的開發準則, 可以幫助工程師有效率的管理自己的程式碼。

以下就來分享一下筆者自己跟這多年來與別人一起coding的一些心得, 把這些經驗整理成準則, 讓新手工程師可以參考一下。

有些開發工具如:Microsoft Visual Studio 或 Visual studio code 能幫我們在撰寫程式碼時, 就會自動縮排對齊功能、註解、自動帶出宣告過的的物件名或變數….減少拼錯字導致程序出錯的機率。初學者可以多利用這類的開發工具來撰寫程式。

一. 設計準則

  • 可重覆被利用的程式段, 改寫成class function

    隨著開發時間愈長, 你寫過的程式檔案會累積愈來愈多, 比如: 你寫了一個抽獎活動的API功能. 下一個專案可能會再用到; 或你這次專案寫了一個檢查發票格式或特殊電話規則的邏輯。如果未來可以被再拿出來應用的話, 你就可以試著將這些邏輯寫成function 統一放在一個 class 或 .js .vb 集中管理.

    以後有新專案只要引用你已開發好的 class 或 js檔. 你就可以馬上使用了. 當然你也可以用google找到並下庫別人寫好的function開源碼。然後加到自己的class裡。

    通常筆者外掛class有:
    資料庫存取類、圖形處理類、加解密類、檢查格式類、傳輸檔案類、日期處理類、工具類….

    小結: 以上就是你累積的coding外掛程式, 而且你的外掛會愈來愈多, 相對的你開發速度也會加快許多。
  • 變數宣告統一在程式段的最前面

    一開始就宣告好程式後面會用到的變數或物件名,好處是Visual Studio這類的開發工具可以在你coding過程中, 自動檢查已宣告過的變數名, 當你要取用變成或物件時, 系統就會自動帶出全名, 很方便快速又不怕會拼錯字。

    小結:變數宣告集中管理, coding不易拼錯外, 日後維護查找bug也容易, 不會散落在各處。
  • 程式碼加註解

    梁爸除了上述1中的外掛function一定要加使用註解外,在專案裡有時也會習慣寫一下註解
    //取出學生的姓名
    // 2021/04/01 需求單位要求修改
    //暫定, 待debug
  • 區段大綱註解
    在visual code裡, 只要在程式碼中輸入如下:
    #region 開始處理訂單明細
    ……..
    你的code
     ……..
    #endregion

    這段程式碼就會有收合的功能, 如果你這隻程式檔有上千行時, 這功能就很好用.平時可以縮成一行的段落標題, 要看時再點[+]展開看裡面的程式碼。

    小結: 可以很容易讓人理解這段在寫什麼及到哪裡為止。增加日後管理維護的效率。
  • 串接第三方的網址連結用變數
    很多時候我們在開發上會需要串接第三方的API, 如: Facebook , Google login, 簡訊發送, 信用卡,….
    這時我們一定會呼叫到對方的API URL, 建議一開始就宣告成共用變數放在某一個檔案或class集中管理.

    如:
    string SMSurl="http://test.sms.com/"; ‘//這是測試機位置

    call SendSMS(SMSurl+"v1/unicode/……) //呼叫發送簡訊1
    ………
    ………
    call SendSMS(SMSurl+"v1/unicode/……) //呼叫發送簡訊2

    以上如果未來要改成對方正式機位置時, 只需改第一行的URL, 避免自已或接手的人漏改的情形。

    小結: 第三方的API URL不要散落在各處, 要集中宣告管理. 日後好維護。

  • 程式碼縮排
    Visual Studio工具本身會自動縮排, 但如果使用其他文字編輯軟體時, 盡量也要縮排
    如:
    int a=0;
    for (int i=0; i<100; i++) {a += i;
    if (a>50)
    {break;
    }}


    縮排後如下:

    int a=0;
    for (int i=0; i<100; i++)
    {
    a += i;
    if (a>50)
    {
    break;
    }
    }

  • 物件生命週期及記憶體管理
    C# 可以使用using語法來讓系統自動結束物件佔用的記憶體
    如:
    using (sqlCommand MySqlcom = new sqlCommand())
    {
    ......
    } //這裡結束時 MySqlcom 會自動釋放記憶空間.
    傳統寫法

    sqlCommand MySqlcom = new sqlCommand();
    MySqlcom.Commandtext=......
    .....
    MySqlcom.Dispose(); //這裡手動釋放記憶體.


    可以參考入門書籍詳細介紹各程式語言對變數、物件生命週期的介紹及管理. 管理的好可以讓伺服器有足夠的記憶體使用、相對反應效能也比較好。

二. 命名規則

2.1 變數命名規則

變數命名時, 可以用英文正確拼出為原則, 如會員編號MemberID, 第一個字大寫, 遇到縮寫時全大寫.

當遇到由二個以上英文單字組成時, 不要用符號連接, 請直接英文相連即可
如: Member_ID 建議改成 MemberID

然後再最前面再加上三碼的變數型態來表示
如: intMemberID, strMemberName. 如此一來就可以很容易看出此變數的型態及用途。

2.2 程式命名規則

程式檔案命名一率都小寫(含副檔名), 第二個英文單字第一個字大寫
如: memberList.aspx 、orderEdit.php、memberData.js

2.3 Class、Function、Sub 命名規則

名稱:第一個字英文大寫, 第一個單字命名盡量與該功能名稱相符,
如: GetMemberInfo()、SetMemberData()、DelOrder()

參數:可以用英文正確拼出為原則, 如會員編號MemberID, 第一個字大寫, 遇到縮寫時全大寫.當遇
到由二個以上英文單字組成時, 不要用符號連接, 請直接英文相連即可如: Member_ID -> MemberID

2.4 資料Table命名

變數命名時, 可以用英文正確拼出為原則, 如會員編號MemberID, 第一個字大寫, 遇到縮寫時全大寫.
當遇到由二個以上英文單字組成時, 用符號_連接,

如: Member_Info, Order_Detail, Order_Payment
(這裡命名規則 與 變數及function用 “_ “區隔, 以便之後在程式碼可以容易分判是資料Table)

2.5 資料View命名

View命名規則直接用Table名前面加小寫v
如: vMember_Info

三. 安全性

3.1 表單上的輸入欄位一定要檢查格式及限制長度明確
如: 電話10碼且數字, E-mail50碼且符合E-mail格式, 姓名20碼不可有符號….

3.2 伺服器端API 參數格式檢查
上述3.1 通常由前端JS工程師做資料輸入檢查. 後端工程師(C#, PHP,nodeJS…)
在接收前端來的資料時也要再檢查一次, 因為駭客可以繞過表單,
直接攻擊你 (C#, PHP,nodeJS…) API接口。


3.2.1 寫入資料庫前, 一定要再做一次資料格式檢查
3.2.2 更新資料庫不可用字串組合T-SQL語法, 一律用參數方式寫入.

如:
………
strTEL=chkformat(Request.Form["MemberTEL"],"TEL",0,50,"電話",ref MSG); //先檢查格式
.......
msqlcom.Parameters.Add("@TEL",SqlDbType.Varchar,50).Value= strTEL; //再用參數傳入SQL

以上二段安全機制可以有下列好處:

1.第一道檢查格式不對時, 回傳正確的錯誤資訊給前端, 一方面串接時JS工程師可以快速知道是哪裡錯誤了, 減少雙方來回溝通時間。另一方面使用者也知道哪裡有資料沒填寫好。

2.第二道防SQLinjection攻擊或JSONinjection, 目前雖然還沒有JSONinjection問題, 但難保未來不會發生; 但工程師只要做好 3.2.1、3.2.2 基本上就有雙重保障。

如果你是初學者, 建議可以了解一下SQLinjection的作法, 你先學會如何去攻擊人家, 你才懂怎麼防。

以上感謝以前合作過的工程師們的交流分享, 在此與大家分享. 謝謝。

程式撰寫準則, 換一個角度其實是一種有效率的管理程式方法, 不是嗎?

頂尖的程式設計師大多都是有效率的程式設計師。XD

發表迴響

在下方填入你的資料或按右方圖示以社群網站登入:

WordPress.com 標誌

您的留言將使用 WordPress.com 帳號。 登出 /  變更 )

Google photo

您的留言將使用 Google 帳號。 登出 /  變更 )

Twitter picture

您的留言將使用 Twitter 帳號。 登出 /  變更 )

Facebook照片

您的留言將使用 Facebook 帳號。 登出 /  變更 )

連結到 %s

This site uses Akismet to reduce spam. Learn how your comment data is processed.