项目目录结构
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/ 更相关吗?
阅读本文档,您将找到解决方案
您新公司的项目结构显示出模块化设计的迹象,但很难分辨,因为您的示例不包含 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?
- 由 body 个部分(头部、躯干、腿、尾巴等)?
- 通过"layers"(骨骼、肌肉、神经、皮肤等)?
- 两种方式(动物由 body 部分组成,每个部分由骨骼、肌肉等组成)?
如果做错了,模块化设计会弊大于利,因为它定义了一个框架,它会约束你对系统的思考。但是,如果没有某种形式的体系结构,大型系统就不可能存在,这一点不容置疑。
根据我多年的实践和阅读的大部分内容,经常推荐的 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/ 更相关吗?
阅读本文档,您将找到解决方案
您新公司的项目结构显示出模块化设计的迹象,但很难分辨,因为您的示例不包含 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?
- 由 body 个部分(头部、躯干、腿、尾巴等)?
- 通过"layers"(骨骼、肌肉、神经、皮肤等)?
- 两种方式(动物由 body 部分组成,每个部分由骨骼、肌肉等组成)?
如果做错了,模块化设计会弊大于利,因为它定义了一个框架,它会约束你对系统的思考。但是,如果没有某种形式的体系结构,大型系统就不可能存在,这一点不容置疑。