问题标签 [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 投票
8 回答
2023 浏览

language-agnostic - 如何将数据验证与我的简单域对象 (POCO) 分开?

这个问题与语言无关,但我是 C# 人,所以我使用 POCO 一词来表示仅执行数据存储的对象,通常使用 getter 和 setter 字段。

我刚刚将我的域模型重新设计为超级骗子 POCO,并且对如何确保属性值在域中有意义存在一些担忧。

例如,服务的结束日期不应超过该服务所依据的合同的结束日期。但是,将检查放入 Service.EndDate 设置器似乎违反了 SOLID,更不用说随着需要完成的验证数量的增加,我的 POCO 类将变得混乱。

我有一些解决方案(将在答案中发布),但它们有其缺点,我想知道解决这个困境的一些最喜欢的方法是什么?

0 投票
2 回答
8431 浏览

design-patterns - 实施 SOLID 原则的模式

我正在介绍 SOLID 设计原则,并尝试将单一职责原则和开闭原则与设计模式联系起来。

目前我有

  • SRP:代理,外观
  • OCP:战略、指挥

还有其他我应该包括的基本模式吗?

0 投票
2 回答
790 浏览

oop - 单一职责原则的实现

如果我将我的对象分解为“单一职责”,是否有一个基本的想法是类似的对象应该一起存在还是分开存在,例如,如果我有

将所有这些都存在于内部,但通过接口松散耦合到一个拥有的 Employee 类,是不是很糟糕:

还是更多地考虑在代码中将这些类完全分开(或尽可能地分开)?或者这两种方法都是 SRP 的有效用法?

编辑:我不想批评示例中给出的对象的可行性,我只是为了说明问题而编造出来的。我同意数据、休假和工资单处理不是员工类的领域。

尽管 SRP 确实要求我从作为现实世界表示的对象转向作为围绕单个功能概念的属性和方法的对象

0 投票
4 回答
749 浏览

language-agnostic - 数据传输对象模式?

我遇到了一个问题,我需要针对对象“客户”生成基于 Word 的报告。

我通常通过将 Customer 传递给一个知道如何创建 Word 文档、插入书签等的类来做到这一点。

问题在于,我发现自己将用于检索和格式化有关 Customer 对象的信息的逻辑放在此类中。

我知道这很糟糕,违反了单一责任原则。

我想创建另一个像“CustomerReportInfo”这样的类,它接受一个自定义并具有有关格式化和检索数据的所有逻辑,这样,Word 生成类很小,并且两者可以相互改变而不管彼此。

我只是想知道这个类应该叫什么?我浏览了一系列模式,但我真的看不出任何符合描述的东西。这听起来不像是一种策略或代理……听起来像 DTO,但 DTO 通常是没有功能的愚蠢类,不是吗?

关于这类似于哪种模式的任何想法?

0 投票
9 回答
2995 浏览

oop - 在“现实世界”中使用单一职责原则

我基本上想知道有多少人认为在现实世界的代码中使用单一职责原则是合理的,以及有多少人实际这样做了。在Podcast #38中,Joel 谈到这种 OOP 原则在现实世界中是多么无用;并且这进一步证明了像鲍勃叔叔这样的人可能没有编写过非平凡的系统。

我亲自编写过一些软件项目或在一些软件项目中发挥了重要作用,但在我年轻的职业生涯中直到现在才遇到这种模式。我喜欢这个原则的声音,并且真的很想开始使用它。我发现 Joel 在播客中的论点非常薄弱(如果您继续阅读此处的博客评论,其他人也会如此)。但是,这有什么真相吗?

社区是怎么想的?

0 投票
9 回答
2515 浏览

linq-to-sql - 你是把 Linq2SQL 查询放在各处还是放在专用的 DAL 类中?

我总是在所有地方插入我的 Linq2SQL 查询,几乎在所有地方的每个班级中。

我想知道您将 Linq2SQL 查询放在哪里的策略?

您是将它们放在单独的数据层类中还是将它们存储在各处使用它们的地方?

我认为我需要更改 Linq2SQL 查询的策略并将它们存储到单独的 DataLayer 类中。我认为,如果我要能够有效地进行 TDD 并遵守依赖注入和 Solid 原则,这是必须的。

0 投票
2 回答
464 浏览

oop - SOLID 和用户界面?

我尝试遵循SOLID原则。但每次谈到用户界面时,我发现客户需要的笨拙的混合、聚合数据和单一职责的良好原则之间存在固有的摩擦。

现在可以将典型用户界面的各种点点滴滴划分为单一职责的类,但随后您会遇到各种有趣的构造问题,因为所谓的“分离”的 gui 块实际上经常变成是相同共享状态的不同视图,或者至少是重叠状态的部分视图。

我经常将相当笨重的控制器类混在一起用于我的视图,这些控制器类不是很像 SOLID,但这是相当不一致的编码实践,这让我有点困扰。似乎拆分它的复杂性是不值得的。

那么你如何处理呢?

0 投票
8 回答
8871 浏览

design-patterns - 伟大的软件设计和实施的例子

我希望这不是重复...

您遇到的设计和实施最扎实的软件系统/框架/应用程序是什么?

似乎 TDD、SOLID 原则、OO 设计模式以及类似的东西可以很容易地在播客和博客上使用非常简单的示例进行理论化,但是很难想象开发出完全符合这些标准的大型系统,而不需要大量代码. 在我的公司,由于时间限制,做完整的 TDD 似乎几乎不可能。

如果有人可以向我指出任何好的开源项目,我真的很想深入了解一下有什么好的 TDD/SOLID/等。好像。谢谢。

0 投票
5 回答
3127 浏览

open-source - 展示 TDD 和 SOLID 原则的开源项目

我之前问过一个类似的问题,得到了一些很好的答案,但我认为它太笼统了。

伟大的软件设计和实施的例子

有谁知道任何展示了非常好的 TDD 实践和 SOLID 原则的开源项目?TDD 和 SOLID 被广泛宣传,但我自己从未见过真正做过,我只是想了解它在项目(大或小)中的样子?

0 投票
2 回答
218 浏览

java - 哪些 OSS .net/java 项目最正确地利用了 SOLID 原则?

我想看看/了解如何在实际项目中以正确的方式使用可靠的原则。

还是没有?