【问题标题】:How do you organize classes on a large project?您如何组织大型项目的课程?
【发布时间】:2010-10-17 05:27:37
【问题描述】:

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

我通常会得到几个标准类

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

如果我有更多的端到端模块,它可能是 工人面板.cs 工人数据.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

你如何组织你的课程,有什么优点/缺点?

【问题讨论】:

    标签: code-organization project-organization


    【解决方案1】:

    只是放置会是糟糕的设计吗 一切都在一起,所以一切都是 按功能而不是 类类型?

    没有一般规则,这取决于具体情况、您的个人偏好和代码中的更改模式。 但是,我建议您执行以下操作:

    • 在超类中保留尽可能多的通用代码以消除任何冗余。也许那时甚至不需要某些子类。
    • 我不确定您所说的“模块”是什么意思,但我建议在同一个项目中使用命名空间+子目录来分隔这些内容,而不是使用单独的程序集。仅将程序集用于部署分离目的和类似用途。
    • 您提到的那些“帮助”类听起来有点代码异味。它们可能违反了 OO 原则。查看此链接了解更多信息:http://blogs.msdn.com/nickmalik/archive/2005/09/06/461404.aspx。也许您可以重新组织代码,减少对此类类的需求,同时从更干净的 OO 设计中受益?

    【讨论】:

      猜你喜欢
      • 2015-11-12
      • 2010-09-17
      • 2012-04-07
      • 2012-06-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-08-18
      • 1970-01-01
      相关资源
      最近更新 更多