首页 > 解决方案 > OCP 是否违反了 Clean Architecture 中的 SRP?

问题描述

最近我正在阅读 Robert Martin 的 Clean Architecture。

我对几个 SOLID 原则定义有一些误解。正是单一职责原则和开放/封闭原则。

那么对于第一个,我们有以下

一个类(模块)应该只有一个改变的理由

其中原因actor。听起来很清楚。

继续下一个 - OCP。这里我们有这样的例子 在此处输入图像描述

被误解的部分是数据库和交互器的关系。我们通过 实现组件Financial Data Gateway中的接口,所以我们有两个模块,一个职责。似乎违反了 SRP。DatabaseFinancial Data Mapper

我是对的还是只是为了正确理解而遗漏了什么?

标签: ooparchitecturesolid-principlesclean-architecture

解决方案


我想强调的是,列出的设计方法既不是面向对象的,也不是适用于大多数情况(如果不是所有情况)的良好架构。是我的一篇文章,其中详细说明了为什么会这样。

单一责任原则也有多种,有时是相互矛盾的解释。它在面向对象的上下文中应该意味着基本上是强内聚和松耦合。这是我从实用的角度解释所有这些的幻灯片。

因此,恕我直言,我认为您可能对 SRP、OCP、“清洁架构”的实用性或可行性以及一般的面向对象有错误的概念。

话虽如此,答案是:你的问题的语法都是错误的。不存在“违反 SRP”之类的东西。SRP 的定义非常松散,即使您选择一种解释,它也不是二元的。这是一个严重依赖于需求和上下文的量表,不能(不应该)单独评估。


推荐阅读