線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:1266
推到 Plurk!
推到 Facebook!

程式越寫越大的感想及問題

尚未結案
melticemelt
一般會員


發表:22
回覆:29
積分:10
註冊:2002-10-01

發送簡訊給我
#1 引用回覆 回覆 發表時間:2004-12-04 15:15:16 IP:203.204.xxx.xxx 未訂閱
最近跟另外一位同事在寫一個MDI的程式 我是第一次寫這麼大的程式 而且因為雙方也都在學習中 所以走一步算一步 而且還有期限壓力 所以程式品質可想而知 有用到一堆資料庫 網路元件 和一些抓來的元件 程式越寫越大 常常都會出現不知名的錯誤 接下來是我的感想及一些問題 >>把所有的MDI child都切成bpl檔會有什麼問題產生嗎? 例如變數共享的問題 因為目前已經有幾十個cpp檔了 而寫作時的code completion及compile時間真的很久 而precompile header也不清楚如何使用 想說切成bpl compile才是正途吧 >>產生多個相同的MDI child該如何管理呢? 目前更新資料的方式是要去找到每個MDI child然後再去call function 我想是不是可以用自訂WindowMessage然後用PostMessage方式 由每個MDI child接收到message然後作應有的處裡呢? 這樣會有什麼問題還是限制嗎? 自訂Message要用什麼event來接收呢? >>是不是應該學學MFC的document-view架構精神 把資料部分跟顯示部分完全分離 不要把資料存在任何一個視窗內 而是獨立一些DataModule來存放所有的資料 統一由這些DataModuel進行 資料庫 網路 等動作 這樣可行嗎? 因為目前很多資料都散在各個視窗間 常常我要什麼資料還要去找出另一個視窗才能要的到 因為時間的壓力 目前應該也不會去改現有的程式 只是想說以後的程式應該要有更好的寫作方式 發表人 - melticemelt 於 2004/12/04 15:17:04
shinnuei
一般會員


發表:32
回覆:48
積分:21
註冊:2002-03-13

發送簡訊給我
#2 引用回覆 回覆 發表時間:2004-12-06 14:05:11 IP:59.120.xxx.xxx 未訂閱
to melticemelt:
引言: 最近跟另外一位同事在寫一個MDI的程式 我是第一次寫這麼大的程式 而且因為雙方也都在學習中 所以走一步算一步 而且還有期限壓力 所以程式品質可想而知 有用到一堆資料庫 網路元件 和一些抓來的元件 程式越寫越大 常常都會出現不知名的錯誤 接下來是我的感想及一些問題 >>把所有的MDI child都切成bpl檔會有什麼問題產生嗎? 例如變數共享的問題 因為目前已經有幾十個cpp檔了 而寫作時的code completion及compile時間真的很久 而precompile header也不清楚如何使用 想說切成bpl compile才是正途吧 >>產生多個相同的MDI child該如何管理呢? 目前更新資料的方式是要去找到每個MDI child然後再去call function 我想是不是可以用自訂WindowMessage然後用PostMessage方式 由每個MDI child接收到message然後作應有的處裡呢? 這樣會有什麼問題還是限制嗎? 自訂Message要用什麼event來接收呢?
上述問題可以說是同一個問題。 請問您寫的是那一種程式呢?每一個表單上的功能都差不多嗎?(像是進銷存軟體)。 如果您寫的是進銷存軟體,那您對每一個表單的新增、修改、刪除、First、Next、 Prev、Last 是怎麼維護呢?是寫好一份程式碼後,再把這份程式碼複製到其他表單 的同一個功能上嗎? 如果是的話,程式維護起來真的很累,A表單發現了一個問題,卻要去檢查其他二、三十 個表單,因為當初程式碼是直接 copy 過去其他表單的。 要解決這些問題,可以參考以下連結: 1.【BCB】【發表】同時使用多個 TFrame Instance http://delphi.ktop.com.tw/topic.php?topic_id=43594 2.【BCB】【問題】請教﹕在BCB中如何將現有的VCL組合成新的VCL﹖ http://delphi.ktop.com.tw/topic.php?topic_id=47857 =================================================================== 而我的做法也和上述連結差不多,只是我直接做一個 BaseForm 把這個 Form Add To Repository (加到物件寶庫) 而這個 BaseForm 長的像這樣: 裡面的資料元件只有 DataSource(命名為 DSMaster)、Table(命名為 TBMaster), 而 base form 上所有的資料操作都針對以上兩個元件寫程式,例如:
void __fastcall TfrmBase::TBMasterAfterInsert(TDataSet *DataSet)
{
  TBMaster->FieldByName("CREATE_DATE")->AsString = GetDateTimeStr("Date");
  TBMaster->FieldByName("CREATE_TIME")->AsString = GetDateTimeStr("Time");
}
void __fastcall TfrmBase::TBMasterAfterEdit(TDataSet *DataSet)
{
  TBMaster->FieldByName("UPDATE_DATE")->AsString = GetDateTimeStr("Date");
  TBMaster->FieldByName("UPDATE_TIME")->AsString = GetDateTimeStr("Time");
}
之後你每一個繼承出來的表單都會長成這個樣子(當然你也可以對他做修改), 比如現在繼承出來的表單,功能是新增會員,我們會放上一些dbEdit,一些 Label, 你在這個表單要寫的程式剩下什麼呢?除了操作流程的控制以外,程式碼是"零", 當然不可以完全是"零",因為每一個表單都會有比較特殊的流程、邏輯;但是你己經 省下很多時間去做上述圖中的基本功能、 F1~F12 的熱鍵對應、資料Post前Key的檢 查、更進階的可以做每個輸入元件 focus 及 lostfocus 的顏色,Enter時跳至下一 個欄位。
引言: >>是不是應該學學MFC的document-view架構精神 把資料部分跟顯示部分完全分離 不要把資料存在任何一個視窗內 而是獨立一些DataModule來存放所有的資料 統一由這些DataModuel進行 資料庫 網路 等動作 這樣可行嗎? 因為目前很多資料都散在各個視窗間 常常我要什麼資料還要去找出另一個視窗才能要的到
至於這個問題,大部份的人會習慣開一個 DataModule,把所有的資料元件放進去, 統一管理,也可以把一些共用的變數放在這一個 DataModule 裡面。這樣的架構是 滿方便的。
引言: 因為時間的壓力 目前應該也不會去改現有的程式 只是想說以後的程式應該要有更好的寫作方式
我覺得,如果你真的是用小弟上面所說的"寫好一份程式碼,再複製到其他表單的同一功能上" ,那你可以試試上述方法,我認為會節省很多時間在修改相同的問題上。
系統時間:2024-05-15 19:47:24
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!