我有两种形式,形式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. TextFSM逻辑 - 避免两次捕获相同的数据
- 6. 如何避免在CSS上重复相同的行?
- 7. 如何避免重复输入两个div中选择两个
- 8. 使用Google Cloud Functions可以避免Firebase DB逻辑重复?
- 9. 如何在创建相似的下拉列表时避免重复的代码?
- 10. Django缓存 - 如何设置我的代码以避免重复缓存逻辑?
- 11. 如何避免重复动作设计的WinForms
- 12. 如何避免重复值
- 13. 如何避免重复
- 14. 如何避免重复值?
- 15. 如何避免重复值
- 16. 如何避免重复?
- 17. 合并结构相似的方法以避免重复
- 18. 编辑时避免重复的值:
- 19. SQL逻辑:查找具有相似行的非重复项
- 20. 避免重复
- 21. 避免验证逻辑重复在ASP.NET MVC与两个域对象和视图模型时的良好做法
- 22. 如何避免重复,同时连接两个表
- 23. 我该如何避免重复类似的表情?
- 24. 如何避免为类似的存根重复代码?
- 25. 如何避免在oracle中重复?
- 26. 如何避免重复在PHP循环
- 27. 如何删除逻辑重复在Oracle
- 28. 如何避免重复的if语句?
- 29. 如何避免重复的列值
- 30. 如何避免python-docx中的重复?
虽然这是一个正确的答案,但我不认为这对于考虑问题的OP来说是非常有用的。一些使用WinForms的MVC,MVP和实现的链接可能会非常有帮助。 – cfeduke 2008-11-03 18:33:55