SRP是SOLID原则中的第一个原则,意味着每个实体(模块、服务、类)只能有一个变化的原因。在架构层面,通过根据责任领域将系统拆分为服务/模块来实现。例如,一个服务用于注册用户,第二个用于处理支付,第三个用于发送通知。
Node.js示例:
// userService.js module.exports = { registerUser(data) { /* 用户注册 */ } } // paymentService.js module.exports = { processPayment(order) { /* 处理支付 */ } } // notificationService.js module.exports = { sendEmail(user, content) { /* 发送邮件 */ } }
关键特点:
SRP是否意味着服务不能与其他服务交互?
不可以。服务可以通过清晰定义的API进行交互,同时保持对内部业务操作的独立责任。
可以不通过分隔文件或项目来实现SRP吗?
从技术上讲是可以的,但为了可扩展性和代码可读性,建议按物理单元进行分隔:单独的文件、包、服务。
SRP仅适用于代码还是适用于整个架构?
SRP在所有层面都是相关的:从服务/模块的设计到具体类和函数的编写。