我应该如何管理我的屏幕在WinForms?



所以我正在重写一个windows窗体项目。老项目几乎没有什么问题。这些是我正在尝试解决的问题。

我问题:

一切
  1. 在一种形式的小组讨论中。在代码中切换屏幕是通过隐藏/取消隐藏这些面板完成的。
  2. 跨屏幕运行缓慢。
  3. 数据耦合不良。

我的解决方案:

  1. 将屏幕分解为用户控件(此处简称为"屏幕")。我的主表单上有3个组件,一个导航栏,标题栏和'视图端口'(一个空的,停靠的,面板)。
  2. 我将只保留一个屏幕/用户控件(此处仅称为"屏幕")在内存中并停靠在视图端口。这是通过初始化屏幕并将其弹出到主窗体上的视图端口面板来完成的。改变屏幕只是在视图中破坏当前屏幕并初始化一个新屏幕。这不是为了减少内存使用,而是活跃的组件,据我所知,减慢了旧的winforms项目,是winforms使用cpu来渲染的事实。
  3. 这就是主观上有趣的部分。如果控制器/演示器(来自mvc/mvp类型模式)/代码更改了业务数据,则显示该数据的屏幕需要更新。由于一次只显示一个屏幕,我现在需要检查受数据影响的屏幕是否当前初始化并更新屏幕。我认为检查哪个屏幕使用了数据并检查该屏幕是否处于活动状态,然后为每个数据更改相应的视觉组件将是愚蠢的。当我初始化一个屏幕时,我会绑定(用数据绑定)它所有的控件到我的全局状态。这感觉很完美,因为我将有一些服务用它们自己的控制器影响我的状态,并且这些更改将被处理得与更改数据的ui事件相同。这也是很好的,因为我的数据层将需要传播到相当(对我来说)复杂的数据库,所以保持数据层的清洁将有所帮助。

我的问题:

  1. 我是否正确管理我的屏幕?对于运行缓慢的winforms软件来说,这是一个好的解决方案吗?

  2. 我应该使用数据绑定来实现这一点吗?在本例中,它将是视图数据的唯一来源,并且我已经了解到数据绑定应该适度使用。我错过了什么

我是个新手,这份工作是我第一次使用c#。虽然我以前做过java和flutter/dart。
如果有更好的地方可以问这些问题,我希望你能给我指明正确的方向。在工作中没有其他高级软件工程师可以问我这些类型的问题。

使用相对复杂的软件,通过以太网与这里的硬件设备通信。

我更喜欢有许多小窗口,关闭时保存它们的位置,打开时恢复它们以前的位置,以便用户可以根据需要排列它们。

由于我处理的数据更新速度相对较慢,所以我会定期更新控件中的数据,除非它们是集中的(例如:可能正在编辑中)。

当然,这样,数据有时可能不一致,但在50ms的时间范围内没有人会注意到,直到下一次更新。

由于几乎所有控件都是这样做的,因此逻辑也可以很好地集中。

当然,这是违背绑定范例的,但这是我的开发风格,也适用于其他编程语言。

最新更新