问题标签 [solid-principles]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
35 回答
446835 浏览

oop - Liskov 替换原则的一个例子是什么?

我听说 Liskov 替换原则 (LSP) 是面向对象设计的基本原则。它是什么,有哪些使用示例?

0 投票
7 回答
8897 浏览

java - 接口隔离原则背后的原因是什么?

接口隔离原则 (ISP) 说,许多特定于客户端的接口优于一个通用接口。为什么这很重要?

0 投票
15 回答
9517 浏览

oop - 开放/封闭原则背后的含义和推理是什么?

开放/封闭原则指出软件实体(类、模块等)应该对扩展开放,但对修改关闭。这是什么意思,为什么它是良好的面向对象设计的重要原则?

0 投票
16 回答
83106 浏览

oop - 什么是依赖倒置原则,为什么它很重要?

什么是依赖倒置原则,为什么它很重要?

0 投票
5 回答
319 浏览

solid-principles - 到底是谁的责任?

在我正在编写的应用程序中,我有一个 Policy 类。有 4 种不同类型的策略。每个策略都根据其他策略加权,例如 PolicyA > PolicyB > PolicyC > PolicyD。

谁负责执行逻辑来确定一个策略是否大于另一个?我最初的想法是重载 > 和 < 运算符并在 Policy 类型本身中实现逻辑。

这是否违反 SRP?

0 投票
6 回答
3002 浏览

oop - Information Expert & Tell Don't Ask 不与单一职责原则相悖吗?

Information-ExpertTell-Don't-AskSRP通常作为最佳实践一起被提及。但我认为他们是矛盾的。这就是我要说的。

支持 SRP 但违反 Tell-Don't-Ask & Info-Expert 的代码:

支持 Tell-Don't-Ask 和 Info-Expert 但违反 SRP 的代码:

请告诉我这些做法如何和平共存。

术语的定义,

  • 信息专家:具有操作所需数据的对象应承载操作。

  • Tell Don't Ask:不要为了工作而向对象索取数据;告诉对象做这项工作。

  • 单一职责原则:每个对象都应该有一个狭义的职责。

0 投票
13 回答
3546 浏览

oop - 您如何定义单一职责?

我知道“班级有一个改变的理由”。现在,那到底是什么?是否有一些气味/迹象可以表明该班级没有单一责任?或者真正的答案是否可以隐藏在 YAGNI 中,并且只在你的类第一次更改时重构为单一职责?

0 投票
14 回答
3112 浏览

oop - 数据库专家问:面向对象的设计理论?

我在设计数据库方面工作了很长时间,而这些天我也在 C# 中工作。OO 对我来说很有意义,但我觉得我对 OO 设计的深层理论没有很好的基础。

在数据库领域,有很多关于如何设计数据库结构的理论,主要概念是规范化。规范化直接控制数据库的结构,并在一定程度上决定了如何在数据库中排列实体。

如何设计面向对象程序的结构背后是否有类似的概念?

我所追求的是一个或多个基本理论原则,它们自然地引导开发人员为解决给定问题进行“正确”设计。

我在哪里可以找到更多信息?
有没有我应该阅读的工作?

更新:

感谢大家的回答。我正在阅读的内容似乎是说没有“面向对象设计的大理论”,但是有许多重要的原则——这些原则在很大程度上以设计模式为例。

再次感谢您的回答:)

0 投票
8 回答
4304 浏览

ruby - 猴子修补VS。坚实的原则?

在一些个人项目中,我正在慢慢地从 PHP5 迁移到 Python,我目前很喜欢这种体验。在选择走 Python 路线之前,我查看了 Ruby。我从 ruby​​ 社区注意到的是,猴子修补既常见又备受推崇。我还遇到了很多关于调试 ruby​​ 软件试验的恐怖故事,因为有人包含一个相对无害的库来做一些小工作,但它在不告诉任何人的情况下修补了一些大量使用的核心对象。

我选择 Python 的原因之一是它更简洁的语法以及它可以完成 Ruby 可以做的所有事情。Python 使 OO 的点击率比 PHP 更好,我正在阅读越来越多的 OO 原则以增强对这种更好的理解。

今天晚上我一直在阅读关于罗伯特马丁的 SOLID原则:

  • 单一责任原则,
  • 闭原则,
  • L iskov替换原理,
  • 接口隔离原则,以及
  • 依赖倒置原则

我目前达到O软件实体(类、模块、功能等)应该对扩展开放,但对修改关闭

我的头脑在确保 OO 设计的一致性和整个猴子补丁之间的冲突。我知道可以在 Python 中进行猴子修补。我也明白,“pythonic”就是遵循常见的、经过充分测试的、oop 最佳实践和原则。

我想知道的是社区对这两个对立主题的看法;它们如何互操作,何时最好使用一个,是否应该进行猴子修补......希望你能为我提供解决方案。

0 投票
6 回答
9742 浏览

oop - OOP 有什么规则吗?

最近听说OOP(Java)有9条规则。我只知道抽象、多态、继承和封装四个。OOP 还有更多规则吗?