2013-05-22 44 views
2

我構建了一個帶有Pcapdot.Net DLL的Winform應用程序,該DLL使用Pcap文件並將所有文件包播放到機器網卡中。設計模式/ListBox.Items.Count

最近我已經注意到,我所有的主窗體(其中所有的按鈕點擊\ events)是一團糟,我把所有的方法放在那些函數中,代碼看起來很複雜,很難理解,於是我開始重新排列這個碼。

因爲我的應用程序有Listbox裏面的所有播放文件,我把所有這個播放功能放在播放按鈕中,例如:我有我的Listbox.Items.Count循環,裏面我處理這些文件。現在我想做一些不同的事情,這是我的問題:

是定義處理此Play功能的類的常用方法,並且每次將該文件添加到我的Listbox時,都會從主窗體啓動事件ControlAdded或之後刪除文件ControlRemoved並將這些文件放入我的班級誰擁有該文件的列表?

回答

2

我想你會過得更好重排它更像是這個(分離從UI的業務邏輯):

  • 有你的窗體類中的公共方法返回一個IEnumerable<string>這是名單的文件,稱爲像SelectedFiles()

  • 爲用戶點擊「播放」按鈕時引發的「播放」按鈕設置公共屬性event,稱爲PlayClicked

  • 創建一個「控制器」類,負責創建並顯示錶單。

您的控制器類將附加到PlayClicked事件。控制器的處理程序PlayClicked將調用窗體的SelectedFiles()方法來獲取文件列表,然後執行所需的任何操作。

我甚至會考慮將所選文件的處理代碼包裝到另一個類中,名爲SelectedFileHandler,並將處理文件的邏輯放入該文件中,或許使用方法HandleFiles(IEnumerable<string> files)

然後,「控制器」類仍將掛鉤到PlayClicked事件,但它會使用SelectedFileHandler.HandleFiles()方法來處理文件。

這對你有意義嗎?我可能會誤解你在找什麼。

我基本上說你應該使用Model View ControllerModel View Presenter架構。

+0

我可以有這3節的代碼示例? – user2214609

+0

@ user2214609不幸的是,我現在沒有時間寫代碼示例,但看看[我對這個堆棧溢出問題的回答](http://stackoverflow.com/questions/15605161/how-to-make -form1-label-text-change-when-checkbox-on-form2-is-checked/15605436#15605436) - 我發佈了一些示例代碼,它應該告訴你如何創建公共按鈕點擊事件並在控制器中作出響應。 –

+0

好,非常感謝 – user2214609