Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Oop OCP是否违反了干净体系结构中的SRP?_Oop_Architecture_Solid Principles_Clean Architecture - Fatal编程技术网

Oop OCP是否违反了干净体系结构中的SRP?

Oop OCP是否违反了干净体系结构中的SRP?,oop,architecture,solid-principles,clean-architecture,Oop,Architecture,Solid Principles,Clean Architecture,最近我在读罗伯特·马丁的《清洁建筑》 我对两个坚实的原则定义有一些误解。正是单一责任原则和开放/封闭原则 对于第一个,我们有以下内容 类(模块)应该只有一个更改的原因 其中,原因表示参与者。听起来很清楚 继续下一步-OCP。这里我们有这样的例子 被误解的部分是数据库和交互者的关系。我们通过财务数据映射器在数据库组件中实现财务数据网关接口,因此我们有两个模块,每个模块负责一项工作。似乎违反了SRP 我是正确的还是只是缺少了一些正确的理解?我想强调的是,列出的设计方法既不是面向对象的,也不是适合大

最近我在读罗伯特·马丁的《清洁建筑》

我对两个坚实的原则定义有一些误解。正是单一责任原则和开放/封闭原则

对于第一个,我们有以下内容

类(模块)应该只有一个更改的原因

其中,原因表示参与者。听起来很清楚

继续下一步-OCP。这里我们有这样的例子

被误解的部分是数据库和交互者的关系。我们通过
财务数据映射器
数据库
组件中实现
财务数据网关
接口,因此我们有两个模块,每个模块负责一项工作。似乎违反了SRP


我是正确的还是只是缺少了一些正确的理解?

我想强调的是,列出的设计方法既不是面向对象的,也不是适合大多数情况的良好体系结构。这是我的一篇文章,详细介绍了为什么会出现这种情况

单一责任原则也有多种解释,有时相互冲突。在面向对象上下文中,它的含义基本上是强内聚和松耦合。这是我的一篇文章,从实用主义的角度解释了这一切

因此,恕我直言,我认为您可能对SRP、OCP、“干净体系结构”和面向对象的实用性或可行性有错误的概念


综上所述,答案是:你问题的语法完全错了。不存在“违反SRP”的情况。SRP的定义非常松散,即使您选择了一种解释,它也不是二进制的。这是一个严重依赖于需求和上下文的量表,不能(不应该)单独进行评估。

马丁在他的书中试图解释SRP的含义;但公平地说,他自己的定义已经“成熟”多年了。由于接口没有任何代码,数据持久性的责任显然只在于一个模块。我看不到任何违规行为。。。