Winforms 重构Windows窗体应用程序

Winforms 重构Windows窗体应用程序,winforms,refactoring,Winforms,Refactoring,我正在开发一个windows窗体应用程序。它基本上是由BDUP和原型组合而成的 我在表单中有大约1500行代码(不包括IDE生成的部分类…确切地说是1465),表单有6个选项卡(9个子选项卡)。每个表单中的控件不超过10个,因此多表单解决方案将是一种过分的做法 我有一组实体类,当序列化时,这些实体类会给我一个XML表示,并将其存储在XML文件中。我已经用存储库模式封装了它,以便将来可以将存储移到数据库中。表单使用实体类(用于保存/编辑)和Repo工厂(添加、检索和保存) 现在,我的问题是,150

我正在开发一个windows窗体应用程序。它基本上是由BDUP和原型组合而成的

我在表单中有大约1500行代码(不包括IDE生成的部分类…确切地说是1465),表单有6个选项卡(9个子选项卡)。每个表单中的控件不超过10个,因此多表单解决方案将是一种过分的做法

我有一组实体类,当序列化时,这些实体类会给我一个XML表示,并将其存储在XML文件中。我已经用存储库模式封装了它,以便将来可以将存储移到数据库中。表单使用实体类(用于保存/编辑)和Repo工厂(添加、检索和保存)

现在,我的问题是,1500行代码中的大部分处理UI元素之间的交互(在组合中进行选择会禁用某些元素,或者在网格中显示不同的项目、处理选项卡转换(下一步/后退按钮)、加载菜单(xml文件存储库中的每个不同项目都会成为菜单项)、新建/编辑模式等等(我在同一表格上有三组不同的新建/编辑)

  • 在这里,什么是最好的方法来移动元素交互?比方说,我可能会决定在将来使其成为基于web的UI
  • 更重要的是,我可以应用哪些复合重构
  • 我应该重构哪些模式
  • 谢谢你的帮助


    注意:我正在阅读重构到模式…特别是我想要一个关于重构到MVC的“howto/”技巧…

    你应该研究模型-视图-控制器(MVC)设计模式,从显示逻辑中抽象出你的业务逻辑

    同样的东西还有另一种风格,称为模型视图演示器

    这两项都在网上有大量的记录

    问候,,
    Joon

    Martin Fowler在中描述了不同的UI架构模式。它相当长,但非常值得一读。然后,您将能够确定哪些模式和架构模型最适合您的场景

    在“模型-视图-控制器”部分的末尾,Fowler提到了这些似乎适用于您的项目:

    • 在表示(视图和控制器)和域(模型)分离的表示之间进行强有力的分离
    • 将GUI小部件分为控制器(用于对用户刺激做出反应)和视图(用于显示模型的状态)。控制器和视图(主要)不应直接通信,而应通过模型进行通信
    • 让视图(和控制器)观察模型,以允许多个小部件更新,而无需直接通信-观察者同步

    有关更多信息,请参阅文章及其链接。祝你好运!

    @Joon:我知道模式……我正在阅读《模式重构》……我想要一个“如何”关于重构到MVC…我对问题进行了编辑,以反映同样的情况。Vyas-我发现最容易考虑的是数据访问。因此,第一步:将所有数据访问放在数据访问对象之后。接下来,通过模型类将对DAO的调用移动。然后移动“纯”业务逻辑,如计算、验证约束等。到目前为止,您应该已经拥有了典型的三层应用程序,前端、业务层和DAO逻辑留在前端,然后移动到控制器类,让UI小部件仅与控制器类交互,而控制器类反过来访问模型。@Joon:是的,对于涉及数据库和业务逻辑的应用程序(比如说,工资>60000美元意味着5%的奖金),更容易区分表示、业务和数据。这里,更多的是MSFT P&P所称的[过去称为?]UI流程组件。我将阅读更多关于MVP/MVC的内容,并在我的博客上发布重构课程。谢谢你的投入。你对模式确实很兴奋。@Eric:是的,我是。:)我理解在概念层面上,关注点分离是模式的意义所在。但是,这需要一段时间[即使你认为你很了解模式]获得“啊哈”体验[知道何时应用有时非常微妙的东西]。@Chris:我有时读过Fowler的这篇GUI-Arch文章。但是把链接放错了地方[或者没有进行彻底的搜索;)我现在已经找到了。谢谢你的链接。@Vyas:我很高兴,我很高兴它有帮助。