1

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

我通常会得到几个标准课程

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

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

4

1 回答 1

0

将所有内容放在一起以便所有内容都按功能而不是类类型分隔会是糟糕的设计吗?

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

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