c#架构:可视化组件的功能

本文关键字:功能 组件 可视化 架构 | 更新日期: 2023-09-27 17:50:48

我有一种感觉,我正在把我的组件变成一个大泥球,因为我没有正确构建这类应用程序的经验(更习惯于数据库应用程序堆栈)。

我正在编写类似于视觉编辑器的东西-基本上,一些图形背景,您可以导航(缩放/平移),在其上添加一些对象并操作它们-移动它们,删除,分别移动每个对象的各种元素等。

它在结构上是一个视觉组件(源自某种相当通用的东西)。它包含对项目模型的引用,该模型以编辑器操作的数据的形式表示所有内容。此外,还有许多管理器来实现对项目数据可能发生和确实发生的情况的逻辑,作为对用户操作的响应。到目前为止一切顺利。

组件本身也有许多属性和事件,它们实现了用户交互的特殊性。例如,渲染背景,渲染其上的所有对象,用控件元素(拖动手柄等)修饰所选对象。

现在的问题是:图形实现的细节和与用户的交互——有什么比把所有这些代码集中到组件类中更好的方法吗?我想到了几个选项:

  1. 维护一个大的组件类,所有的东西都在里面,可能同时把它分成几个部分类,以分离责任。

  2. 将渲染和交互逻辑实现到独立的类管理器中,并将组件的实例作为参数传递。-不知何故,管理器需要知道很多关于组件状态的信息,这就是问题所在。许多属性本质上是私有的,对WinForms应用程序的其余部分是不可见的。这是一个问题。

有什么建议吗?

c#架构:可视化组件的功能

我不会使用单独的类并传递内容,只使用来防止巨大的代码文件。

您提到了您的组件引用了项目模型—您可以将可视特征定义为控件,并使用需要显示的数据填充dto类型的类。这将与其他WinForms组件一致;例如,ListViewItems用于ListView控件。

或者,您可以将上面创建的控件子类化,并将对模型的引用放在那里。

否则,如果你真的要创建一个巨大的类,我更喜欢有清晰名称的部分类(MyComponent_Events.cs等),而不是一个巨大的滚轮杀手。