user-interface - 在 MVP 界面模式中划分已经变得太大的演示者的好做法是什么?

标签 user-interface refactoring mvp

我最近经常遇到的一个问题是我的演讲者类(class)变得太大的问题。通常情况下,我可以在不跳过节拍的情况下砍掉一堂普通的大课。但是演示者有时更难削减,而不会使代码更难遵循。

特别是当页面开始填充面向 CRUD 的控件时。有时我会划分控件,但如果它们受到其他控件的影响,则协调逻辑本身就很复杂。有时我会划分列表或网格数据检索,但有时可能会有类似的陷阱。

是否有任何技术、经验法则或您从演示者中重构出来的公共(public)领域?

最佳答案

我通常使用两种方法:

  • 提取业务规则并将其委托(delegate)给域类。
  • 将 View 分区为逻辑相关的控件,然后为每个分区创建一个新的 View 界面。然后,您可以沿着这些相同的路线拆分您的演示者。如果您使用的平台支持子表单组件组(C# 用户控件、Delphi 框架等),这是制作可重用控件的强大方法。

  • 更新

    Split View时,我通常首先拆分界面并让我的表单实现多个界面。
    public class ComplexForm: Form, ISubView, IOtherSubView
    {
        ...
    }
    

    然后我将演示者分成我创建的许多 View 。
    public class SubViewPresenter
    {
        private ISubView subView;
        ...
    }
    
    public class OtherSubViewPresenter
    {
        private IOtherSubView otherSubView;
        ...
    }
    

    您可以更进一步,将 ISubView 和 IOtherSubView 的实现移至用户控件或保持原样。如果您使用的是 被动 View 模式这是 child 的游戏,因为无论如何表单只处理 UI 逻辑。一旦我拆分了演示者,我会尽量避免演示者之间的直接交流。如果需要任何通信,我会尝试通过域对象间接进行。

    关于user-interface - 在 MVP 界面模式中划分已经变得太大的演示者的好做法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/835696/

    相关文章:

    python - wxpython:如何检查 OnDragOver 中的拖动数据?

    c# - 如何增加 NumericUpDown 小数

    ruby - 在给定端口上启动和停止进程的更好方法

    c# - WinForms MVP 是否有另一种方法可以将数据绑定(bind)到 View 而无需 Presenter 访问 View 控件?

    java - 在 Cloud 9 上运行 Java GUI 应用程序

    c# - WPF 中针对不同客户的不同 GUI 定义

    python - 重构函数定义

    Python:如何处理无法正确初始化的类的方法调用?

    c# - 在 MVP Winforms App 中共享模型

    java - 使用 MVP 模式的 Android Facebook 登录实现