php - SOLID 原则中的 SRP 会导致 Lasagna Code 吗?

标签 php oop solid-principles single-responsibility-principle software-quality

根据 SOLID 原则,尤其是 SRP,我们有很多类..
我的意思是,这就像你想建立一个数据库类
然后,你有
处理数据库(选择、插入、更新、删除等)的 DatabaseHandler 类,

DatabaseAdapter类是一个扩展的PDO类(可以在构造时设置首选默认模式,一个新的prepare方法,直接准备语句,将其与参数绑定(bind),并执行它,

QueryBuilder 类是 SelectStatementBuilder 类、InsertStatementBuilder 类、DeleteStatementBuilder 类、UpdateStatementBuilder 类(用于构建 SQLStatement)的父类,

构建 WHERE 子句所需表达式的表达式类

SQLStatement 类(它就像一个普通的字符串,但它的接口(interface)是 SQLStatementInterface 所以我们可以知道它是一个 SQL 语句等。

而且,我知道如果我深入挖掘并再次重构,将会有更多的类。

SRP 原则的实现会导致 Lasagna 代码吗? Lasagna 代码可以吗?

最佳答案

一般来说,SRP 是一种设计原则,要求您全面考虑系统的不同职责(也称为更改原因)。它的目标是帮助提高您的系统凝聚力。换句话说,一起改变的事物会保持在一起

Uncle Bob defined SRP作为:

A class should have only one reason to change.

当采用错误的粒度级别时,SRP 可以被解释为一个类应该只做一件非常小的、低级别的事情,这会导致过度抽象而没有明显的好处。通读他的论文,您会注意到“更改原因”是在用户/客户/消费者需求级别定义的。一个简单的示例是,如果我的 UI 要求的更改导致我更改包含一些数据访问层代码的类,那么该类有多个更改原因(即 UI 和数据访问),这违反了 SRP。

在您的情况下,除非您正在构建数据库管理工具,否则没有理由将原始数据库类分解为这些许多较小的类。如果这是一个典型的(网络)应用程序,那么如果您想更改底层数据库实现(比如在测试期间从 MySQL 到内存数据库),那么所有这些类都必须被替换。不妨保持简单。

关于php - SOLID 原则中的 SRP 会导致 Lasagna Code 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30010682/

相关文章:

php - 为什么mysql不使用for循环插入10行?

php - 如何根据它们是否匹配行号来填充 HTML 表编号行?

php - WordPress:以正确的顺序覆盖子主题中的多个 css 文件

javascript - 错误我不明白

oop - 考试类型应用程序的数据结构

php - 从具有公共(public)字段的多个表中删除

oop - 开闭原则和依赖倒置原则有什么区别?

c# - 使用其关系中的属性为子类建模的正确方法

c# - S.O.L.I.D Essentials 缺少点?

oop - 类与对象层次结构