2010-06-25 63 views
1

在Windows窗体,C#,.NET 3.5,VS2008 ...的WinForms MenuStrip中隔离,以提高代码的可维护性

什么是隔离的MenuStrip中(或任何复杂的控制组)代码的好办法,这是孩子菜单项,从我的表单的其余部分?

例如,当我有一个带有多个菜单的MenuStrip并且每个菜单都有一些菜单项(它们都有点击事件)时,大量的代码将被传入Form.Desinger.cs文件中, Form.cs文件。这在技术上不会造成任何问题,但只是觉得有太多东西全都倾倒在一个地方(以及其他所有形式)。

在我的整个项目上运行代码度量标准时,表单被标记为具有任何项目文件的最差可维护性索引。通常情况下,我不会过于偏袒代码度量工具的方向,但在这种情况下,我完全同意。

据代码度量,形式违反了这些最佳做法:

  1. 太多的类耦合
  2. 的代码
  3. 总体低可维护性

可能的解决方案太多行隔离从表单的其余部分的MenuStrip:

  1. 将其填充到UserControl中
  2. 其他想法?
+0

将[GeneratedCode]属性放在InitializeComponent方法上。 – 2010-06-25 20:18:04

回答

0

我认为你应该关注表示逻辑的隔离业务逻辑,例如,不要在点击处理程序中放置太多代码,也不要执行菜单项的命令。

确保您的代码度量标准不会触及生成的代码,也不会关注自动生成的代码中的错误度量标准。

0

例如,您是否可以禁用或过滤CodeMetrics,以抓取* .Designer.cs?

如果不是,我会使用Factory类,以便您可以在一行中创建这些结构。不利的一面是,它降低了Designer的功能。在工厂中,例如,可以基于模板字符串+“_FileMenu”命名每个组件,以便可以在Factory构造函数中设置基本“名称”。

为了减少Form.cs文件中的代码溢出,可以考虑更多的MVC方法,以便当设计器生成时(比如说一个private void button1_Click方法),可以将某些业务逻辑抽象为其他类的其他方法。因此,例如,button1_Click将不会移动所有文件,而会调用InitiateMoveFileMethod(string source, string destination)