我正在開發一個桌面應用程序,它的主窗體生長得相當大。在不同級別的多個容器中有很多控件(SplitContainers,TabPages,Panels)。C#:如何巧妙地設計一個桌面應用程序的圖形用戶界面,封裝在心裏
現在我想通過分離負責數據綁定的所有控制器代碼來重構此類,將控件清理或執行用戶交互到單獨的控制器類中。
[編輯]
目的
這個應用程序的目的是爲了跟蹤訂單(稱爲作業)以及它們的位置(稱爲Jobitem)。每個工作都與一個客戶相關,每個工作項目與一篇文章相關(工作項目包含特定於其文章製造過程的信息,因此它將包裝文章)。 Job,Jobitem,Customer和Article具有由PropertyManager類管理的動態屬性(基本鍵/值對)。
架構
我的應用程序被分成2個主要項目:核心包含3種LinqToSQL的DataContext類的數據模型:
ArticleManagement
JobManagement
PropertyManagement
對於每個DataContext類,都有一個XyzManager
類,它將集合中的LinqToSQL對象提供給GUI,封裝LinqToSQL數據源。它還處理創建,刪除和修改其相應的DataContext類型。
然後我有一個GUI項目,當然包含一個主窗體和一些額外的窗體,像選項等東西。截至目前,我的GUI項目持有對每個XyzManager類的引用,並通過設置數據通過Manager類作爲用戶交互指令,包含所有控制邏輯。
我已經把大部分獨立邏輯放到了主窗體類之外的靜態工具類中,但這是我猜想的不太理想的方法。
[/編輯]
這是我的第一大桌面應用程序,我有一個很難封裝GUI。截至目前,負責處理用戶交互的所有控制器代碼都駐留在MainForm類中。
我知道MVC模式,但我不知道如何將它應用於C#WinForm,並使用我當前的設計。
我的自定義代碼單獨超過2400行代碼長,不計算在窗體的自動生成的代碼中,具有上升趨勢。我想重構這個,但是我失去了如何以更優雅的方式解決這個問題。
感謝您的鏈接。 Martin Fowler最後表示,當你想要測試你的GUI時,監督演示者是很好的,但是從控制器和視圖中分離出來並不是那麼好,所以這不是我要找的東西,因爲分離是我的主要目標。可測試性不是問題。演示模型聽起來更適合這個目標。 – 2009-06-24 08:29:39
由於鏈接指向正確的方向,因此被接受爲答案。儘管我現在使用被動視圖(http://martinfowler.com/eaaDev/PassiveScreen.html)作爲解決方案。 – 2009-06-26 05:57:13