solid-principles相关内容

F# 中的应用程序架构/组合

最近我一直在 C# 中使用 SOLID 达到了一个非常极端的水平,并且在某些时候意识到我现在除了编写函数之外基本上没有做其他事情.在我最近再次开始研究 F# 之后,我认为对于我现在所做的大部分工作来说,它可能是更合适的语言选择,所以我想尝试将真实世界的 C# 项目移植到 F#作为概念证明.我想我可以完成实际的代码(以一种非常不惯用的方式),但我无法想象一个架构会是什么样子,它允许我以与 C# 中类 ..
发布时间:2022-01-05 09:49:07 其他开发

单一职责原则在 OOP 中是否有效?

我正在努力理解如何使单一职责原则与 OOP 一起工作. 如果我们要遵循原则进行发球,那么我们不是留下了许多类,其中许多类可能每个只有一个方法吗? 如果我们不完全遵循原则,那么原则的意义何在? 解决方案 我喜欢这样表述单一职责原则:“你写的每一件事——每一个模块、类、接口或方法,都应该有一项工作.它应该完成全部工作,并且只完成那项工作. 请注意,您编写的这些东西有些很大(模 ..

接口隔离原则 - 编程到接口

我正在阅读有关 SOLID 和其他设计原则的文章.我认为 ISP 与“编程接口,而不是实现"相同.但看起来这些是不同的原则? 有区别吗? 解决方案 ISP 专注于每个接口代表一种离散和内聚行为的想法. 也就是说,一个对象应该做的每个逻辑组的事情都会映射到一个特定的接口.一个类可能想要做几件事,但每件事都会映射到代表该行为的特定接口.这个想法是每个界面都非常专注. ..

访问外部信息的 DDD 方法

我有一个现有的银行应用程序类,如下所示.银行账户可以是 SavingsBankAccount 或 FixedBankAccount.有一个名为 IssueLumpSumInterest 的操作.对于 FixedBankAccount,只有在账户所有者没有其他账户时才需要更新余额. 这要求 FixedBankAccount 对象了解帐户所有者的其他帐户.如何通过遵循 SOLID/DDD/GRA ..

如何将 SOLID 原则实施到现有项目中

对于这个问题的主观性,我深表歉意,但我有点被困住了,我很感激以前必须处理过这个问题的任何人的指导和建议: 我有(现在变成了)一个用 C# 2.0 编写的非常大的 RESTful API 项目,并且我的一些类变得非常可怕.我的主要 API 类就是一个例子——有几十个成员和方法(可能接近数百个).可以想象,它正在变成一个小噩梦,不仅要维护此代码,甚至只是导航代码都变成了一件苦差事. 我对 ..
发布时间:2021-12-22 08:46:10 C#/.NET

MVC 中控制器的传统使用是否会导致违反单一职责原则?

维基百科这样描述单一责任原则: 单一职责原则规定每个对象都应该有一个单一的职责,并且这个职责应该完全由类封装.它的所有服务都应严格遵守该职责. MVC 中控制器的传统使用似乎导致程序员违反了这一原则.拿一个简单的留言簿控制器和视图.控制器可能有两种方法/操作:1) Index() 和 2) Submit().Index() 显示表单.Submit() 处理它.这两种方法是否代表两种不同 ..

单一职责原则的一个例子是什么?

谁能给我举一个单一职责原则的例子?我试图理解在实践中,一个班级只有一个责任意味着什么,因为我担心我可能每天都违反这条规则. 解决方案 查看 可靠的描述. 除非你要求更具体的东西,否则很难提供更多帮助. 单一职责是一个类做一件特定的事情(职责)而不是试图做超出它应该做的更多的概念,这也被称为高内聚力. 类通常不会以低内聚开始,但通常在几个版本和不同的开发人员添加它们之后,您 ..

你能用一个好的 C# 例子来解释 Liskov 替换原则吗?

你能用一个很好的 C# 示例来解释 Liskov 替换原则(SOLID 的“L"),以简化的方式涵盖该原则的所有方面吗?如果真的有可能. 解决方案 (此答案已于 2013-05-13 重写,请阅读评论底部的讨论) LSP 是关于遵循基类的契约. 例如,您不能在子类中抛出新的异常,因为使用基类的人不会想到这一点.如果基类抛出 ArgumentNullException 如果缺少参 ..
发布时间:2021-12-12 08:06:43 C#/.NET

什么是 Liskov 替换原则的例子?

我听说 Liskov 替换原则 (LSP) 是面向对象设计的基本原则.它是什么以及它的使用示例有哪些? 解决方案 一个很好的例子说明了 LSP(由鲍勃叔叔在我最近听到的播客中给出)是有时在自然语言中听起来正确的东西在代码. 在数学中,Square 是 Rectangle.实际上,它是矩形的特化.“is a"使您想通过继承对其进行建模.但是,如果在代码中您使 Square 从 Rect ..

猴子修补 Vs.坚硬的.原则?

我正在一些个人项目中慢慢从 PHP5 迁移到 Python,目前我很喜欢这种体验.在选择走 Python 路线之前,我看了看 Ruby.我从 ruby​​ 社区注意到的是,猴子补丁既常见又受到高度重视.我还遇到了很多关于调试 ruby​​ 软件的试验的恐怖故事,因为有人包含了一个相对无害的库来做一些小工作,但它在没有告诉任何人的情况下修补了一些经常使用的核心对象. 我选择 Python 是因 ..
发布时间:2021-07-11 19:30:21 其他开发

可能有助于代码重构

Sandi Metz 在 GORUCO 的 SOLID OOPS 概念 中说,Ruby 中 if..else 块的存在可以被认为是一种偏差来自开闭原则.可以使用哪些所有方法来避免不紧急的 if..else 条件?我尝试了以下代码: 课堂乐趣def park(s=String.new)看跌期权结尾def park(i=Fixnum.new)我=我+2结尾结尾 并发现函数重载在 Ruby 中不起作 ..
发布时间:2021-07-05 20:42:44 其他开发

违反里氏替换原则

来自维基百科, Liskov 的行为子类型概念定义了对象的可替代性;也就是说,如果 S 是 T 的子类型,那么程序中类型 T 的对象可以替换为类型 S 的对象不改变该程序的任何理想属性(例如正确性). 假设以下类层次结构: 基础抽象类 - AnimalWithFur.它有一个只读属性 furColor,在后继者中被覆盖. 基类的继承者 - Cat,它覆盖了 furColor 并 ..
发布时间:2021-06-12 19:17:05 其他开发

如何在 PHP 中的子类继承方法中定义更严格的类型?

假设我有三个这样的类. 抽象类 A {抽象受保护函数 doSomething($object): 数组;}B类扩展A{受保护的函数 doSomething(SomeObject $object): 数组{//某物}}C类扩展A{受保护的函数 doSomething(OtherObject $object): 数组{//某物}} 根据 PHP 的继承原则,上述结构不是合法的 PHP 代码,因为方 ..
发布时间:2021-06-12 19:11:08 PHP

单一职责原则的范围是什么?

今天我工作的另一位工程师问我“这个单一职责是什么?"我的回答如下: “代码的每个范围,无论是 if 语句、函数、类还是模块,都应该有一个改变的理由". 但在我读到的任何地方,人们都在课堂上交谈.我告诉他 SRP 适用于他代码中的每个范围是错误的吗?. 解决方案 Bob Martin 曾多次尝试解决这个问题.问题是这里有两个不同的原则;非常不幸的是,其中一个没有真正的名字,这就是 ..

可能违反单一职责原则的控制者?

参考此评论, 当一个类有很长的参数列表时,它可以是一个“代码闻到“你的班级试图做的太多,可能没有遵循单一责任原则.如果你的班级正在尝试做太多,考虑将您的代码重构为多个相互消耗的小类. 对于下面的这个控制器类我应该怎么做 - 它是“试图做太多事情"吗? 类控制器{公共 $template;公开 $translation;公共 $auth;公开$文章;公共 $nav;公共函数 __con ..

使用字符串vs枚举作为工厂方法的参数?

我最近正在阅读此博客 https://blog.cleancoder.com/uncle-bob/2021/03/06/ifElseSwitch.html 和本段使我感到困惑: 请谨慎使用该令牌x.不要试图使其成为枚举或其他任何东西需要在红线上方进行声明.整数或字符串是一个更好的选择.它可能不是类型安全的.确实,它不能安全输入.但是它将允许您保留组件您的架构的结构. 如果我们在较高级别 ..
发布时间:2021-04-30 19:28:38 其他开发