【问题标题】:Clean Architecture in NodeJS, how do useCases interact with each other?NodeJS 中的 Clean Architecture,用例如何相互交互?
【发布时间】:2021-06-16 19:11:39
【问题描述】:

我正在尝试在我的项目中实施 Bob Martin 的 Clean Architecture,但我有一个问题。

用例如何相互交互?

例如:

我有一个Department 实体和Employee 实体。

部门实体有一个peopleCount 字段

每当创建新的Emplyoee 时,它也会分配给Department,这意味着peopleCount 必须增加1。

那么addEmployee.jseditDepartment.js 用例之间的交互应该如何?

我是否在我的addEmployee.js 中使用const editDepartment = require("../departments"); 并在addEmployee.js 中使用它?

我是否将其作为依赖项注入然后使用它?

我是否创建一个单独的用例increasePeopleCountInDepartmentById.js 并要求/注入那个?所以它是有特定目的的东西,而不是“一般”的编辑。

【问题讨论】:

    标签: javascript node.js architecture clean-architecture


    【解决方案1】:

    用例如何相互交互?

    用例是系统接收外部请求(例如用户输入)并按照一系列操作对其进行响应(Wikipedia)的场景。因此,根据定义,用例不能相互交互。而且,他们没有兴趣互相交流。

    一个用例,无论是 addEmployee 还是 editDepartment(取决于您的系统设计),都应该协调参与的域实体(员工和部门)。同样,混合用例是无关紧要的。

    以下是实现 addEmployee 的方法:

    // TODO: start database transaction
    const newEmployee = employeeFactory.create(id, name, age, targetDepartmentId);
    const department = departmentRepository.get(targetDepartmentId);
    department.peopleCount = department.peopleCount + 1;
    departmentRepository.save(department);
    employeeRepository.add(newEmployee);
    // TODO: commit transaction
    

    我是否将其作为依赖项注入然后使用它?

    从我的示例可以推断,三个对象将被注入到用例中:employeeFactory、departmentRepository、employeeRepository。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-10-02
      • 1970-01-01
      • 2014-12-24
      • 1970-01-01
      • 2014-02-26
      • 1970-01-01
      • 1970-01-01
      • 2013-11-26
      相关资源
      最近更新 更多