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

design-principles - Liskov 替换原则 - 没有覆盖/虚拟方法?

我对 Liskov 替换原则的理解是,基类的某些属性是真的,或者基类的某些实现的行为,对于派生类也应该是真的。

我想这意味着当一个方法在基类中定义时,它不应该在派生类中被覆盖——因为这样替换基类而不是派生类会产生不同的结果。我想这也意味着,拥有(非纯)虚拟方法是一件坏事?

我想我可能对原理有错误的理解。如果我不这样做,我不明白为什么这个原则是好的做法。谁可以给我解释一下这个?谢谢

0 投票
3 回答
205 浏览

logging - 日志记录应该驻留在一个主要目的不是日志记录的类中吗?

这更像是一个理论问题。日志记录应该驻留在一个主要目的不是日志记录的类中吗?

这是一个简单的界面,用于对数字进行计算的任何内容。

这是执行计算并进行一些日志记录的 ICalculation 接口的实现。我相信这是一种非常务实的做法。除了构造函数接受我们通常不希望在计算域中看到的东西之外,内联日志记录可以说是非侵入性的。

从 RealIntenseCalculation 中删除所有日志记录代码后,代码现在似乎具有明确的单一职责

好的,所以我们删除了真正强烈计算的记录其内部的能力。我们怎样才能找到一种方法来外部化该功能。输入装饰器模式。

通过创建一个装饰 ICalculation 的类,我们可以将日志重新添加到组合中,但这样做会损害在真正强烈计算的私有方法中发生的一些更精细的日志记录。

拥有日志装饰器还有哪些其他可能的优点和缺点?

0 投票
5 回答
9973 浏览

.net - 在 Bootstrapper 中配置 Automapper 违反了开闭原则?

我在 Bootstrapper 中配置 AutomapperBootstrap()Application_Start()Bootstrapper. .

你怎么看,我真的违反了这个原则吗?

0 投票
2 回答
709 浏览

.net - .NET 的 SOLID DDD ORM 请求(使用干净的实体和存储库)

是否有一个 ORM 可以

  • 保持我的实体类干净,没有任何属性和类的属性
  • 不会是 ActiveRecord 模式,所以它不应该有 entity.Save/Delete 等。

可选:能够执行存储过程并将结果解析为实体

0 投票
4 回答
240 浏览

.net - 我应该如何规划系统重写的架构?

我正计划重写一个我以前参与过的当前系统。我这样做是一种学习练习。下面是对旧系统的描述、新系统的基本架构、我想要遵循的一些最佳实践、我想要实现的目标以及我的问题。

让我解释一下旧系统:
1. SQL Server 数据库(未规范化)
2. Palm 应用程序(将数据输入数据库)
3. Web 服务 1(Palm 应用程序将数据发送到数据库)
4. Web 应用程序(将数据输入数据库)将数据输入数据库) - 我创建了这个
5. Web 服务 2(Web 应用程序 1 将数据发送到数据库) - 我创建了这个
6. 网站(直接到 CRUD 数据并打印报告)

让我解释一下我对新系统的架构概念:
1. UI Web 应用解决方案 - 替换旧网站。
2. UI Web 应用解决方案 - 替代旧的 Web 应用和 Palm 应用。
3. Web 服务解决方案(使用 WCF) - 替换旧的 Web 服务 1 和 Web 服务 2。
4.业务对象解决方案 - 业务对象、对数据访问解决方案的代码调用和对业务逻辑解决方案的代码调用将放置在这里。
5.业务逻辑解决方案——业务规则会放在这里。
6.数据访问解决方案 - 将数据输入/输出数据库的代码将放置在这里。
7.数据传输对象解决方案 - 用于传输信息如下: 7.1。 与 Web 服务解决方案之间的 UI 解决方案。
7.2. 到/从业务对象解决方案的 Web 服务解决方案。
7.3. 到/从数据访问解决方案的业务对象解决方案。

让我解释一下我对新系统的最佳实践概念:
1. Web 服务解决方案的单元测试。
2.业务对象解决方案的单元测试。
3.业务逻辑的单元测试。
4.数据访问解决方案的单元测试。
5.单一职责原则
6.打开/关闭原则
7.里氏替换原则
8.接口隔离原则
9.依赖倒置原则

新的系统目标
我希望我能够生成干净的代码,其中包含单元测试和围绕整个系统的集成测试,同时学习设计模式、WCF、TDD、Rhino Mocks、Expression Blend 3、Visual Studio 2010 和 TFS 2010. 我也想用这个系统作为未来学习新语言的参考,比如 Rails。

问题
1.根据我的说明,有人对我的架构有疑问吗?有更好的想法吗?
2.是否有一些我应该遵循但未列出的最佳实践?
3.我列出了哪些不应该遵循的最佳实践?

谢谢你的时间!

0 投票
4 回答
255 浏览

code-generation - 健壮的代码框架?

我讨厌编写使我的软件更可靠的代码。这是框架应该做的事情!那么,是否有人知道可以巩固代码的代码“增强”实用程序?

如果我必须自己创建类似的东西,它将按如下方式工作:当您使用 Debug 标志编译代码时,它会自动为每个方法添加“固化”代码:

使用 try-catch 扭曲代码并将 Debug.Assert(true) 放入 catch 中(以便在其起源处捕获异常)。

记录每个方法的条目,打印参数的“ToString()”值,这样我就可以追踪发生了什么。

检查每个参数是否为空。

使用“IsValid”框架检查对象本身和每个参数,其中 IsValid() 是对象声明其期望为真的方式(例如,如果我是 TableOfContentsEntry,我希望始终在 IsValid 的书中() 并指向 IsValid() 的页面。

那么,为什么不呢?

0 投票
1 回答
167 浏览

nhibernate - SOLID SRP 和 FluentNhibernate 实体

这个类来自http://wiki.fluentnhibernate.org/Getting_started 它有一些逻辑,我认为这违反了单一责任原则,你怎么看,你会如何解决这个问题?

困扰我的另一件事是为什么在 nhibernate 中总是使用 IList 而不是功能较少的 IEnumerable ?

0 投票
5 回答
2899 浏览

c# - 我的 rpg 的单一职责原则 (SRP) 和类结构看起来“很奇怪”

我制作角色扮演游戏只是为了好玩,并了解更多关于 SOLID 原则的信息。我首先关注的事情之一是 SRP。我有一个代表游戏中角色的“角色”类。它有名字、健康、法力、能力分数等。

现在,通常我也会将方法放在我的 Character 类中,所以它看起来像这样......

但是由于 SRP,我决定将所有方法移到一个单独的类中。我将该类命名为“CharacterActions”,现在方法签名看起来像这样......

请注意,我现在必须在所有 CharacterActions 方法中包含我正在使用的 Character 对象。这是利用 SRP 的正确方法吗?它似乎完全违背了 OOP 的封装概念。

还是我在这里做错了什么?

我喜欢的一件事是我的 Character 类非常清楚它的作用,它只是表示一个 Character 对象。

0 投票
2 回答
884 浏览

c# - 如何衡量 C# 代码的 SOLIDness?

有哪些指标以及哪些工具可以衡量 C# 代码的SOLID ness?或指示哪些地方最有害地违反原则的工具?

0 投票
3 回答
1184 浏览

c# - 真实世界的开源 c# 应用程序展示了良好的代码

我一直在阅读 SOLID 原则,想知道在 DOTNET 中是否有一个很好的大型开源应用程序或项目,可以显示在现实世界产品中使用的 SOLID 原则。

如果有任何其他开源项目被认为是很好的编码示例,我也会非常有兴趣看到它们。