代码之家  ›  专栏  ›  技术社区  ›  Steve

如何将应用程序范围组件放入WinForms中?

  •  2
  • Steve  · 技术社区  · 15 年前

    在WinForms应用程序中,应用程序范围的组件存储在哪里?我看到我可以在应用程序中创建组件的后代。然后,我可以拖放希望在项目中的表单之间共享的组件。这是共享组件访问(非可视控件)的最佳实践吗?在Delphi中,我们有一个数据模块。数据模块是一个简单的设计图面,用作非可视组件的容器。我将把数据访问对象拖放到这个表面上,并从所有窗体访问它们。它为我的数据对象提供了一个很好的中心位置和缓存。

    你们在WinForms中是怎么做到的?

    3 回复  |  直到 15 年前
        1
  •  3
  •   user33675    15 年前

    System.ComponentModel.Component 提供了一个 design-surface for non-visual components in Visual Studio . 通常,在项目中,您可以像使用窗体和用户控件的设计器一样“添加”“组件”并开始添加和配置非可视组件。

    对于全局访问(应用程序范围),您可以作为公共(或内部)静态成员提供对程序类中组件的访问。

    您可以在主方法中初始化此成员,或者通过程序与MainForm或其他组件之间的任意复杂交互来初始化此成员,例如使用System.ComponentModel中相关类规定的服务基础结构和IContainer的自定义实现。

        2
  •  0
  •   Charlie Salts    15 年前

    我通常使用singleton来记录类、数据库适配器等。当您希望在整个应用程序中对对象进行静态引用时,这很方便。

    不过,我可能误解了你的问题。

        3
  •  0
  •   jrista    15 年前

    有许多方法可以实现应用程序的“应用程序范围”对象和数据。但是,确定您需要访问的共享“组件”中的哪些实际上只是全局的,或者其中的一些实际上是“上下文的”,可能会很有用。在某些情况下,全局组件和上下文组件之间可能存在细微差别。

    对于像记录器这样的实用程序,它作为一个全球设施最有用,因为日志记录是那些令人讨厌的横切问题之一。然而,在许多情况下,信息是特定上下文的,应该被包装在某种上下文对象中,只有在该上下文中实际执行的代码才可以访问。有时很难识别上下文。如果您可以识别它,并且您可以找到如何在正确的时间初始化和使上下文对象可用到正确的代码,那么您应该得到一个更好的产品,它具有更适当的组织代码,而不仅仅是使一堆数据可以全局访问。

    我建议研究BDD,行为驱动开发,一种将敏捷和TDD实践融合到更严格的开发方法中的方法论,其中上下文起着关键作用。