你如何组织一个大型项目的课程?

时间:2009-04-02 20:40:54

标签: code-organization project-organization

我们的应用程序中有许多功能,可以非常具体地描述为模块。通常有某种设置对话框,然后当用户单击“确定”时,它会配置要运行的进程并运行该进程。有时它们会被更多地调用,用户将打开新对话框并在对话框上工作一段时间,做很多事情来改变底层数据库。

我通常最终得到几个标准类

ConfigPanel.cs
ConfigPanelData.cs
ProcessRunner.cs
ApiWrapper.cs (for calling the process from somewhere else)

如果我有一个更多的端到端模块,它可能是     WorkerPanel.cs     WorkerData.cs     SetupOptions.cs(运行之间持久化的面板状态)     LIB / WhateverBackendStuffINeedToSupportModule     ApiWrapper

现在每个文件夹都有文件夹:

UI/Panels/
    Module1Panel.cs
    Module2Panel.cs
UI/PanelData/
    Module1PanelData.cs
    Module2PanelData.cs
UI/PanelManagers
    Module1PanelManager.cs
    Module2PanelManager.cs
Core/Module1/
    Module1.cs
    Module1Helpers.cs
Core/Module2/
    Module2.cs
    Module2Helpers.cs

正如你所看到的,一切都真的散开了。有50多个模块,这些文件夹并没有真正有条理。即使通过子系统打破它们,它们仍然是一团糟。把所有东西放在一起是不是很糟糕的设计所以一切都是按功能而不是类型分开的?

Module1/
    Module1Panel.cs
    Module1PanelData.cs
    Module1PanelManager.cs
    Module1PanelLib.cs
    Module1PanelWrapper.cs
Module2/
    Module2Panel.cs
    Module2PanelData.cs
    Module2PanelManager.cs
    Module2PanelLib.cs
    Module2PanelWrapper.cs

您如何组织课程以及有哪些优点/缺点?

1 个答案:

答案 0 :(得分:0)

  

刚刚放入是不好的设计   所有的一切都在一起   按功能分开而不是   班级类型?

没有一般规则,这取决于您的代码中的情况,个人偏好和更改模式。 不过我建议做以下事情:

  • 在超类中保留尽可能多的公共代码以消除任何冗余。也许那时甚至不需要一些子类。
  • 我不确定“模块”是什么意思,但我建议在同一个项目中使用命名空间+子目录分离内容,而不是使用单独的程序集。仅将程序集用于部署分离目的和类似的东西。
  • 你提到的那些“助手”课听起来有点臭。它们可能违反OO原则。有关详细信息,请查看此链接:http://blogs.msdn.com/nickmalik/archive/2005/09/06/461404.aspx。也许你可以重新组织代码,减少对这些类的需求并同时获得更清洁的OO设计的好处?