【发布时间】:2021-08-31 08:34:19
【问题描述】:
当我必须保证的过程相当复杂时,我总是有一个关于如何保证单一责任原则的问题。
我使用 3 层架构后端:控制器(我的 API 端点)|服务(单一职责功能)|数据(访问数据库)
假设我有一个进程ProcessA,它由4 个任务TasksA1、TasksA2、TasksA3、TasksA4 组成。
如果我的控制器层上暴露了一个端点,例如:POSTMethodProcessA
应该如何编写我的代码以尊重我的服务层上的单一责任原则?
我看到的选项:
选项1(控制器必须知道流程):
class MyController {
exports.processA = functions.https.onRequest(req, res) => {
myservice.doTaskA1(); // single responsability on task1
myservice.doTaskA2(); // single responsability on task1
myservice.doTaskA3(); // single responsability on task1
myservice.doTaskA4(); // single responsability on task1
});
}
选项 2(服务了解流程并解除 Single 责任)
class MyController {
exports.processA = functions.https.onRequest(req, res) => {
myservice.doProcessA();
});
}
//inside the service (the doProcessA method must be in charge of multiples tasks and loose the single responsability principle :
class MyService {
function doProcessA() {
this.doTasksA1();
this.doTasksA2();
this.doTasksA3();
this.doTasksA4();
}
}
如果任务本身是由多个作业组成的,这个问题对我来说更加复杂:FirstJobA1、SecondJobA1、ThirdJobA1 ...
应该如何在代码结构上处理这些复杂性层以尊重单一责任原则,这一直困扰着我。任何见解都会有很大帮助!
【问题讨论】:
标签: design-patterns architecture solid-principles single-responsibility-principle