0

经过一番思考和考虑,我决定将我现有的应用程序目录结构重组为垂直切片方法,该应用程序当前是水平切片的(分层)。

为了匹配所需的结构,我在这个问题中更改了我的项目文件以匹配下面的链接示例并使事情变得清晰。

- Controllers [Based on Request Method, GET, POST, PUT, calls appropriate service method]
  - ProductsController.php
- Data
  - DAL [Data Access Layer - Specific Read / Write Queries]
      - Products
  - Mapper [Maps parameter array to object]
      - ProductsMapper.php
  - Model [Contains classes matching table structure]
      - Product.php
  - Service [Business Logic]
      - ProductsService.php
  - Provider [Database Connection Class]
      - Database.php

因此,经过一些研究,我得出的结论是,如果我使用 Vertical Slices 对我的应用程序结构进行建模并找到一个清晰的示例,事情会变得更容易。

带洋葱,带垂直切片

- Features
  - Products
    - AddFavoriteProduct
      - AddFavoriteProductController.php
      - AddFavoriteProductCommand.php
      - AddFavoriteProductResponse.php
      - AddFavoriteProductCommandHandler.php
      - AddFavoriteProductContainer.js
      - AddFavoriteProduct.js
      - AddFavoriteProduct.css
    - GetProductList
      - GetProductListController.php
      - GetProductListQuery.php
      - GetProductListResponse.php
      - GetProductListCommandHandler.php
      - GetProductListContainer.js
      - GetProductList.js
      - GetProductList.css

我面临的问题是我将什么委托给这四个文件中的每一个。

我的大致理解如下。

控制器 - 处理请求并调用命令/查询,还是这个 CommandHandler?

命令/查询 - 这有插入/更新命令,或数据库查询,在我的情况下,这将通过像 Doctrine 这样的对象关系映射框架来促进

响应 - 将所需信息或命令状态结果以 JSON 形式返回给用户

CommandHandler - 不清楚这里有什么......

寻找一些示例片段,或一些澄清开始。描述四个组件中的每一个的功能会有所帮助。

4

1 回答 1

2

我面临的问题是我将什么委托给这四个文件中的每一个。

我建议尝试在两种张力之间找到平衡

  • 您希望经常一起更改的事物彼此靠近(即:两个想法在同一个源文件中,因为它们在逻辑上和时间上是耦合的)。
  • 您希望具有不同依赖关系的事物位于不同的文件中。

需要审查的重要论文是Parnas 1971

相反,我们建议从一系列困难的设计决策或可能会改变的设计决策开始。然后,每个模块都被设计为对其他模块隐藏这样的决定。

例如,您Controller可能知道有关 HTTP 的所有信息,以及您正在使用的 Web 框架。但它可能不知道您的域模型、数据库连接或事务边界。

(据我所知,“四个”文件并没有什么特别神奇的地方;它可能不止于此,这取决于您如何对设计进行集群,您想要支持哪些其他类型的接口等等。)

于 2021-08-06T17:56:56.573 回答