c# - 用于构建应用程序的 "Main Form"想法的其他替代方案

标签 c# .net winforms architecture

我读过的关于 winform 应用程序的大多数问题都有一个表单类作为包含所有应用程序的主窗体,并调用 Application.Run 使用这个主窗体

当主窗体中的代码开始增长时,窗体被分割成一个个用户控件。

但这就是让我恼火的地方。表单和用户控件应该只是 UI 控件,它们不应包含程序的任何逻辑。

但是“主窗体”的想法仍然有广泛的用途,用于处理从打开应用程序到应用程序关闭的应用程序生命周期。

为了避免这种情况,我尝试在单独的静态“管理器”类中提供程序逻辑来管理程序的不同部分,并且我使用主窗体来管理它们。

例如,我有以下“ThemesManager”类

            public static class ThemesManager
            {
                public static void InstallTheme(string themefile) { }
                public static void ApplyTheme(Theme theme) { }
                public static void RemoveTheme(Theme theme) { }
                public static Theme[] GetThemes() { }
            }

在主窗体中

            public class MainForm
            {
                void InstallTheme_Click(object sender, EventArgs args)
                {
                // Call THeme.Install
                }

                void RemoveTheme_Click(object sender, EventArgs args)
                {
                // Call THeme.Remove
                }
            }

现在应用程序逻辑以某种方式分离,但我认为我正在破坏具有如此多静态类的应用程序体系结构,因为许多类都依赖于它们。例如,显示主题的用户控件使用 ThemesManager.GetThemes()。我觉得我这样失去了OOP的基本概念

那么我还有什么其他选择可以将逻辑与 UI 分开,而不是将“主窗体”作为应用程序的主要组件或 Controller

最佳答案

您可以使用设计模式,例如:

  • 模型– View –演示者 (MVP);
  • 模型- View - View 模型 (MVVM);
  • 模型- View - Controller (MVC)。

它们非常适合将逻辑层与用户界面层分开。 你可以看到一些例子here .这个适用于模型- View - View 模型 (MVVM),适合我。

设计模式的好处在于它们使您的代码可测试。

关于c# - 用于构建应用程序的 "Main Form"想法的其他替代方案,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18193529/

相关文章:

c# - 如何避免 DataView.ToTable() 中出现 KeyNotFoundException?

c# - 如何在C#中合并两个XmlDocuments

c# - ASP.NET Core 中的单元测试自定义密码验证器

c# - 在 C# 中获取用户空闲时间?

c# - 拒绝访问!?我无法从 C 驱动器上的安装文件夹中打开文件

c# - 我可以在未绑定(bind)的 DataGridView 中设置最大行数吗

c# - 在 IEnumerable View 中编辑数据(订单行的项目)

c# - 将数据库中的数据绑定(bind)到 .NET 中的下拉列表

.net - 选项卡页在 C# (winform) 中添加一个新属性

wpf - WPF 中的 IWin32Window