项目目录结构

Project directory structure

根据我多年的实践和阅读的大部分内容,经常推荐的 Web 应用程序项目目录结构与 MVC 结构紧密相关:

tests/
src/
  styles/
  markup/
  scripts/
    views/
    models/
    controllers/

不过,我最近开始在一家新公司工作,他们的项目存储库结构很奇怪(对我来说很奇怪)。开发人员解释说,他们发现这个 feature-structure 更容易理解(我不知道这个项目结构到底叫什么)。它是这样的:

app/
src/
  component1/
    test
    view
    model
    controller
  component2/
    test
    view
    model
    controller

当然,有些组件没有 view, model, controller 文件,因为它们更类似于独立模块或业务逻辑,而不是 MVC 架构的一大块。在我看来,这使得结构不那么直观。

任何人都可以阐明这一点吗?我觉得我对这种情况的看法有偏见,因为我一直在 MVC-ish/flux-like 应用程序结构中工作。

这种结构有什么优点,还是某些开发人员的弱点和经验不足造成的?

谨记 所涉及的项目是 Web 应用程序和 Web 服务的混合体。

编辑: 这个问题与 https://softwareengineering.stackexchange.com/ 更相关吗?

阅读本文档,您将找到解决方案

check here

您新公司的项目结构显示出模块化设计的迹象,但很难分辨,因为您的示例不包含 components/modules 的真实姓名。如果模块名称没有暗示一些直观可理解的架构,那么问题可能是您新公司的项目是 Conway's law 的受害者,它指出

organizations which design systems ... are constrained to produce designs which are copies of the communication structures of these organizations

康威定律是每个团队倾向于勾画自己的领土的结果,在那里它可以享受更多的自由,而不需要与其他人协调每一个变化。这通常会导致一些较低级别的功能在属于不同团队的 "modules" 中重复。

模块化结构的另一个问题是,可以从不同的角度将大型系统划分为组件,应用错误的组件会引入不必要的复杂性。例如,你会如何分解一只 Animal?

  1. 由 body 个部分(头部、躯干、腿、尾巴等)?
  2. 通过"layers"(骨骼、肌肉、神经、皮肤等)?
  3. 两种方式(动物由 body 部分组成,每个部分由骨骼、肌肉等组成)?

如果做错了,模块化设计会弊大于利,因为它定义了一个框架,它会约束你对系统的思考。但是,如果没有某种形式的体系结构,大型系统就不可能存在,这一点不容置疑。