【问题标题】:Separate controllers for child entities子实体的单独控制器
【发布时间】:2014-08-06 10:12:31
【问题描述】:

这可能是非常基本的问题,但我找不到直接的答案, 我想了一会儿,仍然没有弄清楚什么是最佳做法?

在父子关系中,例如部门/员工我应该采取以下行动:

DepartmentController -> addEmpoyee(deptId) 
DepartmentController -> editEmpoyee(empId)
DepartmentController -> employees(deptId)

或者更确切地说为员工操作创建单独的控制器? EmployeeController -> add(deptId) EmployeeController -> 编辑(empId) EmployeeController -> list(deptId)

第二种方法对我来说很有意义,但第一种似乎是合乎逻辑的,因为员工是部门的子实体......

【问题讨论】:

    标签: oop model-view-controller


    【解决方案1】:

    我会创建一个DepartmentCrudController 来收集这些方法(索引、显示、创建、删除、新建、编辑)。

    确实,CRUD 本身就是ONE责任,因此不违反单一责任原则。

    但是,控制器调用的相关命令(例如看一下 CQRS),如果包含一些业务逻辑(任务驱动的 UI),应该将它们本身分开,以降低对变化的敏感度,增加您的灵活性应用。

    但是对于一个简单的 CRUD,一个服务层类就足够了。

    您的控制器应该是一个简单的不起眼的对象,委托给您的用例(服务层),这意味着根本不需要任何业务逻辑。

    【讨论】:

    • 谢谢,所以我想我会使用单独的控制器 - 如果我理解正确的话。这对我来说很有意义,尽管有时将所有相关逻辑扔给父控制器看起来更容易......
    • @GrumpyHat 不,我的意思正好相反:只保留一个控制器。 CRUD 本身代表一种责任,尤其是在控制器中,因为它旨在成为一个简单的不起眼的对象。
    • 对,但在这种情况下,控制器可能会变得非常大,因为我将添加、编辑、删除、搜索(索引)、查看部门并再次查看员工,因为他们使用不同的表单(这是一个网络应用程序)。最重要的是,我很可能会为父实体和子实体提供更多自定义方法...
    • 自定义方法应该是另一个控制器的一部分。我今天在一个类似的 CRUD 控制器上工作,按方法最多需要大约 3 行。 (因为不起眼的对象 => 只委托给模型)。 stackoverflow.com/questions/5324049/…
    • 你想有DepartmentCrudController(部门的CRUD),EmployeeCrudController(员工的CRUD),以及父级上的常用方法,我们称之为BaseCrudController。这个 BaseCrudController 本身可能继承自 BaseController,这是所有的根。所有 DepartmentCrudControllerEmployeeCrudController 不通用且与 CRUD 无关的方法都应该是完整的其他控制器的一部分,或者更好的是另一个模型。
    猜你喜欢
    • 2019-03-28
    • 1970-01-01
    • 1970-01-01
    • 2015-12-15
    • 1970-01-01
    • 2019-03-10
    • 2020-03-02
    • 1970-01-01
    • 2011-11-24
    相关资源
    最近更新 更多