我有兩種形式,形式A和形式B.這些形式在外觀上必須有所不同,但它們共享很多邏輯。問題是這個邏輯與外觀相關聯(按鈕點擊驗證,事件被觸發等)。例如,我有一個名稱字段,當按下保存按鈕時,我需要觸發一個事件,導致父表單驗證記錄名稱以避免重複。兩種形式都需要這種邏輯,但是他們的保存按鈕位於不同的位置,並且發生錯誤時顯示的工具提示也需要出現在不同的位置。這只是一個例子,但是有誰知道我可以避免在這裏複製和粘貼代碼的方式?也許我錯過了一些顯而易見的東西...如何避免在兩個相似的WinForms上重複邏輯?
4
A
回答
12
您可以創建一個對象,其中包含以兩種形式表示的數據,並將驗證邏輯放入該對象中。表示層應該用輸入的數據填充該對象,要求對象驗證自己,然後以特定於表單的方式處理驗證錯誤。
3
如果通用邏輯與UI相關,則需要使用所需的邏輯創建自己的自定義窗體類(從Form類繼承)。那麼你需要做的就是在你的表單中繼承這個類。
如果通用邏輯與UI相關性較低,則創建一個內部類來封裝通用邏輯並從兩種形式中調用它。
3
您需要在2個視圖和共享模型之間添加一個控制器。這樣你只需要做:myController.save();而不必調用你的模型對象來保存它們在winform中。
1
我可以想出很多方法來重構這些表單以共享邏輯。您可以結合使用以下一項或多項:
- 創建包含業務對象並添加表單之間共享的附加功能的UI特定「bean」對象。這個bean可以執行諸如創建工具提示,協助驗證,事件等等。
- 創建一個具有常用功能的助手類。推廣這兩種形式的邏輯來調用這個助手類來實現常用功能。
- 增強您的業務對象以進行驗證。我並不是說你的BO應該知道任何用戶界面,但他們可以/應該執行業務規則。這可能會將一些驗證邏輯從您的表單中拖到一個常見的位置。
- 創建特定於您正在使用的數據類型的自定義控件,並在這兩個窗體上使用這些控件。
1
您可能還想看看CSLA Framework,我在過去的項目中使用它非常成功,可以幫助減少不同用戶界面之間重複代碼的數量。它利用.NET的數據綁定功能,但我不認爲需要使用數據綁定才能充分利用框架。
相關問題
- 1. C#避免重複邏輯
- 2. 類似的邏輯,但不同的類(避免重複)
- 3. 如何避免後端和前端的邏輯重複?
- 4. 如何避免授權碼邏輯的重複
- 5. promisifying js方法如何避免邏輯重複?
- 6. 如何避免模板中的邏輯?
- 7. TextFSM邏輯 - 避免兩次捕獲相同的數據
- 8. 如何避免在CSS上重複相同的行?
- 9. 簡化的邏輯,以避免重複錯誤信息
- 10. 如何避免重複輸入兩個div中選擇兩個
- 11. 如何避免在域和應用程序層之間重複驗證邏輯?
- 12. 使用Google Cloud Functions可以避免Firebase DB邏輯重複?
- 13. 如何在創建相似的下拉列表時避免重複的代碼?
- 14. 如何避免兩個linearLayout在Android中相互重疊?
- 15. Django緩存 - 如何設置我的代碼以避免重複緩存邏輯?
- 16. 如何避免驗證事件的重複Winforms
- 17. 如何避免重複動作設計的WinForms
- 18. 如何避免在xaml中重複類似的標記?
- 19. 如何在連接兩個表時避免重複值?
- 20. 如何避免重複?
- 21. 如何避免重複值?
- 22. 如何避免重複值
- 23. 如何避免RowDefinition重複?
- 24. 如何避免重複
- 25. 合併結構相似的方法以避免重複
- 26. 編輯時避免重複的值:
- 27. SQL邏輯:查找具有相似行的非重複項
- 28. Python:如何合併列表的兩個列表,避免重複?
- 29. 避免重複
- 30. 避免重複
雖然這是一個正確的答案,但我不認爲這對於考慮問題的OP來說是非常有用的。一些使用WinForms的MVC,MVP和實現的鏈接可能會非常有幫助。 – cfeduke 2008-11-03 18:33:55