【问题标题】:Application Architecture, The best way to accomplish this应用程序架构,实现这一目标的最佳方式
【发布时间】:2010-11-09 19:40:44
【问题描述】:

在过去的两到三个月里,我一直在深入研究 C# 和 WinForms,但最近我将开始一个项目,这将有助于了解更多关于在 .NET 中编程时遇到的现实问题

我主要是一个基于 web 的程序员,使用 PHP、MySql、Unix 等,当我创建一个网站时,我喜欢有一个具体的框架来处理以下事情:

  • 错误处理
  • 输入/输出
  • 应用结构
  • 数据库/模型抽象
  • 资源监控

该列表中还有其他内容,但请保持简短。

所以当我在 C# 中时,我意识到当应用程序加载时,我们直接运行主窗体,对我来说,这让你在主窗体中强制窗口/窗体的逻辑/

我个人可能是错的,应该这样做,但我真的不这么认为,我希望制作一组控制“应用程序进程”的类,这个基础系统将控制表单、线程等的实例化和处理。

所以当Application.run() 启动我的应用程序时,我希望它启动一个名为System 的对象,然后该对象将解析Settings FilesRegistry keysMeta Information (CPU,Ram etc)DebuggerSwitch Detection 等。

然后它会处理信息,根据影响应用程序负载的不同实体,我们将运行一个表单,将信息传递给该表单。

在该表单中,如果 A 用户单击 File > Options,那么它会要求系统加载选项表单,然后 System 类将加载选项表单并传入所需的信息。

如果该表单需要取消线程,如果它可以为我将它放置在一个新线程中,它将作为系统基础,并监控它直到它完成。

构建一个像这样工作的系统的一个很好的例子是什么,你们对我应该如何去做有什么建议吗?

此外,在 C# 语言中构建 MVC 架构的任何非常好的示例、书籍、文章也将是一个加分项。

请在这个问题上启发我。

【问题讨论】:

    标签: c# winforms model-view-controller architecture


    【解决方案1】:

    罗伯特,

    如果你使用 Visual Studio 构建一个新的 Windows 应用程序,你肯定会得到主窗体作为显示的第一个屏幕,但它不需要像这样。

    Visual Studio 会为您做到这一点。它使用 Main 方法(它是您的应用程序的入口点,与任何其他语言非常相似)创建一个 Program 类 (Program.cs),并为您调用主窗体。

    查找 Program.cs,您会发现:

    静态类程序 { /// /// 应用程序的主入口点。 /// [STA线程] 静态无效主要() { Application.EnableVisualStyles(); Application.SetCompatibleTextRenderingDefault(false); 应用程序.运行(新 Form1()); } }

    知道了这一点,您就可以对其进行更改,并且几乎可以做任何您想做的事情来改变您的应用处理表单的方式。

    【讨论】:

    • 从我嘴里说出来的话 :) Program 类,或者子类化或挂钩到 Application 类绝对是你想要的方式。
    • 那么我可以删除“新项目”的所有内容,然后创建一个基类,在该类中添加[STAThread],这样不会有任何问题吗?
    • 你知道有什么资源可以展示如何使用这种方法设计应用程序
    • 很抱歉,我并不是真正的表单专家。但我认为,如果您有任何类型的限制或要求需要您创建这种解决方案,您应该提出一个新问题,以便我们进行讨论。
    【解决方案2】:

    有不同的架构可以满足这种方法:

    分层架构:让您的应用程序分层。在单独的层(读取程序集/可执行文件)中实现用户界面(称为表示)。所以应用程序现在远离了winform。将业务逻辑(应用程序流程的工作方式)放在单独的层中,将数据访问放在单独的层中。

    您可以使用 MVC 或自己做任何事情。并通过将层保存在 DLL 中并在表示层中实例化它们(与您现在的想法相同的方式)将层保持在同一进程(进程内)中。因此您可以在业务逻辑层中实现您的类。另一个思维方式是面向服务的架构。在这种情况下,您可以将其余层作为服务运行并在表示层使用服务。在这种情况下,您可以保留服务器的单个副本并多个前端(表现层)应用使用同一个。

    【讨论】:

      【解决方案3】:

      如果您正在构建一个更大的应用程序,您可以构建一个框架来处理模块、组件、资源和表单的启动,然后在最后显示您的表单。我自己使用MEF 执行此操作,因此当我的应用程序启动时,我让 MEF 组合所有组件,从 MEF 检索我的主表单,然后使用 Application.Run 启动它。或者我有时会重新调用我的主表单控制器 (MVC) 并告诉控制器处理 Application.Run。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-12-25
        • 2011-07-20
        • 2012-03-08
        • 1970-01-01
        • 1970-01-01
        • 2015-04-18
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多