oop - OCP 是否违反了 Clean Architecture 中的 SRP?
问题描述
最近我正在阅读 Robert Martin 的 Clean Architecture。
我对几个 SOLID 原则定义有一些误解。正是单一职责原则和开放/封闭原则。
那么对于第一个,我们有以下
一个类(模块)应该只有一个改变的理由
其中原因是actor。听起来很清楚。
被误解的部分是数据库和交互器的关系。我们通过 实现组件Financial Data Gateway
中的接口,所以我们有两个模块,一个职责。似乎违反了 SRP。Database
Financial Data Mapper
我是对的还是只是为了正确理解而遗漏了什么?
解决方案
我想强调的是,列出的设计方法既不是面向对象的,也不是适用于大多数情况(如果不是所有情况)的良好架构。这是我的一篇文章,其中详细说明了为什么会这样。
单一责任原则也有多种,有时是相互矛盾的解释。它在面向对象的上下文中应该意味着基本上是强内聚和松耦合。这是我从实用的角度解释所有这些的幻灯片。
因此,恕我直言,我认为您可能对 SRP、OCP、“清洁架构”的实用性或可行性以及一般的面向对象有错误的概念。
话虽如此,答案是:你的问题的语法都是错误的。不存在“违反 SRP”之类的东西。SRP 的定义非常松散,即使您选择一种解释,它也不是二元的。这是一个严重依赖于需求和上下文的量表,不能(不应该)单独评估。
推荐阅读
- react-native - 有条件地切换 React-native 中的元素重叠元素而不是替换
- python - 如何按照收到的顺序制作游戏库存商店物品?
- c - cppcheck “可能的空指针取消引用”。误报还是错误?
- mongodb - MongoDB聚合:对象键中的元素计数
- javascript - 功能不切换如何解决此问题?
- solidity - Truffle 合约验证无法在 BSC 测试网上运行
- maven - Maven:验证 Maven 是否可以访问存储库
- tensorflow - Mobilenet 参数:alpha 和 rho
- bit-manipulation - 为什么使用 n&(n-1) 不能计算 1 的位数?
- rust - `?` 运算符只能在返回 `Result` 的函数中使用(但该函数返回 `Result`)