您是否曾经根据您的用户界面部分构建您的源代码?例如,如果您的 UI 包含:
- 用于显示一些属性的 GridView
- 3D 渲染面板
- 用于选择活动工具的面板
,然后您或多或少地按以下方式命名和分组您的变量和函数:
class Application
{
string PropertiesPanel_dataFile;
DataSet PropertiesPanel_dataSet;
string[] PropertiesPanel_dataIdColumn;
void PropertiesPanel_OpenXml();
void PropertiesPanel_UpdateGridView();
string ThreeDView_modelFile;
Panel ThreeDView_panel;
PointF[] ThreeDView_objectLocations;
void ThreeDView_RenderView();
string ToolPanel_configurationFile;
Button[] ToolPanel_buttons;
void ToolPanel_CreateButtons();
}
您对此有何看法?这种架构可以长期工作吗?
PS。尽管此解决方案可能会让您想起 Front-ahead-design 愚人节的笑话http://thedailywtf.com/Articles/FrontAhead-Design.aspx我的问题是严肃的。
编辑
半年以来一直在维护和扩展这种代码。应用程序在主 .cs 文件中已增长到 3000 多行,大约 2000 行分散到较小的文件中(包含通用帮助函数和类)。代码的许多部分应该被概括并从主文件中取出,我一直在努力,但最终这并不重要。代码的结构和细分非常简单,通过它很容易导航。由于 UI 包含的主要组件少于 7 个,因此将整个设计一次融入您的脑海中没有问题。回到这段代码总是令人愉快的(在一些休息之后)并立即知道从哪里开始。
我想这个巨大的类似程序的结构在我的案例中起作用的原因之一是 c# 中 UI 编程的类似事件的性质。在大多数情况下,这些代码所做的就是实现不同类型的事件,这些事件确实特定于这个项目。尽管某些事件函数会立即变成几页长的怪物,但事件处理程序之间的耦合并不是那么紧密,因此之后重构和压缩它们变得更容易。这就是为什么我故意将泛化和重构留到以后,当其他项目开始需要该项目使用的相同部分的实现时。
PS 可以浏览 3000 行代码,我在 Visual Studio 中使用 FindNextSelection- 和 FindPrevSelection-macros。左键单击某个变量后,我按 F4 跳转到它的下一个实例,按 F2 跳转到前一个实例。也可以选择变量名称的一部分并在部分名称匹配之间跳转。如果没有这些捷径,我很早就会迷失方向:)