将应用程序范围组件放在Winforms中的位置?

时间:2009-08-11 19:52:25

标签: c# winforms scope components

您在winforms应用程序中将应用程序作用域组件存储在何处?我看到我可以在我的应用程序中创建Component的后代。然后,我可以拖放我想要在项目中的表单之间共享的组件。这是共享访问组件(非可视控件)的最佳实践吗?在Delphi中,我们有一个DataModule。 DataModule是一个简单的设计表面,用作非可视组件的容器。我会将Data Access对象拖放到此表面上,并从所有表单中访问它们。它为我的数据对象提供了一个很好的中心位置和缓存。

你们是如何在Winforms中做到这一点的?

3 个答案:

答案 0 :(得分:3)

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

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

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

答案 1 :(得分:0)

我通常使用单例来处理日志类,数据库适配器等。当您希望在整个应用程序中对对象进行静态引用时,这很方便。

但是,我可能误解了你的问题。

答案 2 :(得分:0)

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

对于作为全局设施最有用的实用程序(例如记录器),日志记录是那些棘手的跨领域问题之一。但是,在很多情况下,信息是特定的上下文,并且应该包含在某种上下文对象中,只能访问实际在该上下文中执行的代码。上下文有时难以识别。如果你可以识别它,并且你可以弄清楚如何在适当的时间对正确的代码进行初始化和提供上下文对象,那么你应该得到一个更好的产品,它具有比你刚刚制作一堆更合适的组织代码。全球可访问的数据。

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