看板 C_and_CPP 關於我們 聯絡資訊
我剛開始學GUI程式的時候,流程是這樣的(我想初學者很容易這麼做吧 XD): (1) 開啟一個GUI專案(當時使用的語言是C#) (2) 一邊思考一邊把介面(Textbox、Button等)拉好 (3) 從Button的處理函式開始寫程式碼。譬如說我要寫個排序的程式: void btn_start(Object o, EventArgs args) // 以C#的語法為例 { string input = txtInput.Text; // 處理input,把string變成int陣列 // 排序演算法(一大串程式) // 把排序結果擺在textbox或其他什麼東西上面 } 這樣的程式絕對是可以跑的,拿去交作業也很ok 但是演算法跟視窗介面黏在一起,就會有一些討厭的缺點,譬如 (1) 我沒辦法把那個排序演算法拿到別的地方使用,除非複製貼上再修改 (2) 我沒辦法隨意的換掉排序演算法(譬如把bubble改成quick) 後來我就會先把演算法先用 console專案 寫好,譬如弄個 int* bubble_sort(int* inputs) { // 一大串排序演算法 // 重要的是,這個函式不應該有input/output的動作 // 譬如scanf, printf或cin, cout都不該寫在這裡 // 要不然拿去視窗介面的時候,還需要修改這個函式的內容 } int main() { // 讓使用者輸入一串數字(scanf或cin應該在這裡用) // 丟入 bubble_sort 函式 // 把結果輸出(printf或cout應該在這裡用) } 這樣只要在console程式底下除錯、確認函式是ok的 再拿到視窗程式去,不但可以重覆使用、而且也不會跟視窗的介面太緊密 這是個很簡單的例子,畢竟要怎麼漂亮的切割,我也還需要學習 XD 很多情況都比這個例子還要複雜難搞 但只要一想偷懶的話,介面跟演算法又黏起來了 XDDD 其實我還做不到 MVC 那麼好的規劃 但是避免直接把演算法寫在 handler function 裡,其實就差很多了 XD -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.117.171.46 ※ 編輯: james732 來自: 140.117.171.46 (05/04 18:39)
loveme00835:我的第一個視窗程式是 WIN32... > < 05/04 18:43
其實在C#之前,我就先寫過Win32跟MFC了 不過以上兩者都讓我迷失在奇怪的細節....orz ※ 編輯: james732 來自: 140.117.171.46 (05/04 18:47)
xatier:我的第一個是小黑窗(逃 05/04 18:47
loveme00835:View在存取自己的控件時, 假如是TextBox, 但是顯示的 05/04 19:00
loveme00835:資料是整數時, 此時setter就可寫成 void setText(int) 05/04 19:01
loveme00835:getter則是 int getText(), 我覺得這才夠格稱為真正的 05/04 19:02
loveme00835:Accessor 05/04 19:02
板主不考慮發篇文嗎 XD ※ 編輯: james732 來自: 140.117.171.46 (05/04 19:03)
loveme00835:@"@ 05/04 19:05
aecho:MVC是個奇怪的東西…它在Cocoa-Touch、Qt、MFC裡 05/04 20:33
aecho:長的都不太一樣 =w= 05/04 20:33
uranusjr:MVC 只是一個概念, 要怎麼實作本來就看人... 05/04 21:04
chchwy:mvc重要的是觀念阿 05/04 21:18
aecho:Qt的 http://goo.gl/qIyoT 05/04 21:50
aecho:看到View/Controller combined在一起,變成Model/View 05/04 21:51
aecho:iOS的說明文件 http://goo.gl/mCOhw 05/04 21:55
aecho:Fig 4-6,是DP書中的MVC。Fig 4-7,Cocoa的MVC。 05/04 21:56
aecho:我比較喜歡Cocoa的MVC 05/04 21:56
aecho:M/V沒關聯,只有C認識M/V 05/04 21:57
james732:Cocoa的MVC超神的.... 05/04 21:57
aecho:這樣M/V的再利用性,我認為比較高。 05/04 21:57
aecho:C的角色相當於DP所說的Mediator,再利用性會比較低。 05/04 21:59
VictorTom:小弟我研所用BCB6時, 也是先拉介面再把實作寫在 05/04 22:15
VictorTom:Button1Click() 裡; 重複的功能就複製貼上....XD 05/04 22:15
loveme00835:我還是比較喜歡把C做成Command+Strategy, 之所以會用 05/04 22:31
loveme00835:Mediator也是有Observer的味道, 但是Model若為Plain 05/04 22:33
loveme00835:Old Object, 感覺就沒啥必要了 05/04 22:34