将表单的方法保留在窗体类中,或放在唯一的类中
本文关键字:唯一 窗体 表单 方法 保留 | 更新日期: 2023-09-27 18:35:20
我有一个表单,上面有 3 个选项卡控件,每个选项卡控件都有十几个文本字段。现在,我拥有在 Form1.cs 中修改文本字段的所有方法,该方法有效,但是一个非常长的类。我很好奇将调用表单控件的方法保留在该表单类中是否是 propper 方法,或者您是否应该将它们划分为其他类?我读了这个线程,我可能会感到困惑,但听起来选择的答案是说你不应该尝试从其他类访问表单控件?如何在 C# 中从类访问表单方法和控件?
在此方案中,封装的最佳方法是创建包含每个选项卡的文本字段的用户控件。 然后,每个选项卡上只有一个用户控件,并且特定于这些字段的所有逻辑都封装在其自己的控件中。
如果您可以将访问 UI 数据的代码保留在 Form
内,但将对该数据进行操作/执行计算的代码保留到另一个类中。通过这种方式,您将能够创建一个类或一组类,这些类可用于(例如)单元测试。
这很容易做到,您只需将对表单的引用传递给另一个类,但随后它们变得紧密耦合,因此很脆弱。
更好的选择是定义一个接口并让表单实现它,这可能会变得混乱。
其他选项是将选项卡上的控件移动到用户控件,甚至只是另一个窗体,然后将它们托管在主窗体的选项卡中。然后,您可以隔离每个选项卡的数据和操作。同样,定义和实现一两个接口将帮助您解耦。
可以这样想,您将 UI 分离到选项卡中,从 UI 的角度来看,这背后有一些底层逻辑,因此,在分隔选项卡上的控件执行的功能方面应该有一些逻辑。我见过例外,但这通常是因为选项卡中的分离根本没有逻辑。
有不同的方法来组织应用程序。通常,将 GUI(表单)与其他应用程序逻辑分开是一件事情。仅在窗体中显示逻辑。为数据创建数据类(也称为模型)。您可能希望具有诸如Customer
、Order
、Address
等类。这些类包含"业务逻辑",例如,Order 类知道如何计算税款,而不是订单表单。
通过使用数据绑定将业务对象绑定到窗体,可以节省大量精力。请参阅我的 SO 答案以了解数据绑定的使用。
通过使用 MVC 模式将逻辑分成三个部分,可以更进一步。我不会在这里详细解释它。就是这样,MVC 代表模型视图控制器。模型是业务类,视图是窗体,控制器是管理模型和窗体,加载和存储模型等的类。