Language agnostic 源代码文件应该如何组织?按功能还是按类型?

Language agnostic 源代码文件应该如何组织?按功能还是按类型?,language-agnostic,Language Agnostic,在我编写代码的早期,我倾向于对以类似方式运行的类进行分组。例如: 数据传输对象 对象A 对象B 对话 对话A 对话B 过了一段时间,当我在处理应用程序的某个特定部分时,我不得不到处跳来跳去把它拼凑起来,这让我开始感到沮丧 在过去的几年里,我倾向于按功能组织事情。通常共享的类,例如数据库对象,我仍然保留在一起。我认为这甚至对网站这样的东西也有意义: A页 图像 资源1 对话1 B页 图像 资源2 对话2 这是最好的方法吗?有谁有好的经验法则可以遵循吗?这种“按功能打包”的方

在我编写代码的早期,我倾向于对以类似方式运行的类进行分组。例如:

  • 数据传输对象
    • 对象A
    • 对象B
  • 对话
    • 对话A
    • 对话B
过了一段时间,当我在处理应用程序的某个特定部分时,我不得不到处跳来跳去把它拼凑起来,这让我开始感到沮丧

在过去的几年里,我倾向于按功能组织事情。通常共享的类,例如数据库对象,我仍然保留在一起。我认为这甚至对网站这样的东西也有意义:

  • A页
    • 图像
    • 资源1
    • 对话1
  • B页
    • 图像
    • 资源2
    • 对话2

这是最好的方法吗?有谁有好的经验法则可以遵循吗?

这种“按功能打包”的方法似乎是明智的,对我来说是可行的,当然对Java来说也是如此。。。您希望多久打包一次数据访问层,而不是那个漂亮的新功能


我认为javapractices.com上的分析非常容易阅读,并且涵盖了一些我从未想到过的角度,比如在编程以外的其他领域中,每个功能包是如何工作的。

对于Java,包是重用的单位

对于Python,模块(以及包)是重用的单元

包装应该是独立的

如果将所有数据传输对象放在一个大的包中,就不会有可重用的东西。您可能不需要所有这些数据传输对象定义


如果您通过“实体”(模型、视图、控件、数据访问等)将事物组合在一起,那么您就拥有了一个可在其他应用程序中共享的可重用模块。

您应该像使用您的语言/工具的其他代码那样执行此操作。这不是一个语言不可知的问题;一些语言/工具期望“文件组织”和“文件中的内容”之间存在某种关系,您应该尊重这种关系。

谢谢!我发现这个链接非常有用!