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

asp.net-mvc-3 - 如何在仅使用一个 DbContext 实例时处理不同的职责

我一直在寻找我的问题的答案,但找不到答案,主要是因为我真的不知道如何表达它!

我首先在玩 EF 代码,并尝试在使用依赖注入的同时实现某种存储库模式(感谢 Unity)。我还试图保持 SOLID(至少是 SRP 部分),因为我拥有IStaffRepositoryIDepartmentRepository接口,这些接口又实现IRepository<TEntity>了提供基本CRUD方法的接口。

我的问题是,当我需要更新员工的部门时,如何保持 SRP?

我已经读过,由于可能的内存泄漏,对所有存储库使用单个DbContext实例是不好的做法,所以我不能简单地调用IDepartmentRepository来获取新部门,因为这将使用 my DbContext.

对我来说显而易见的解决方案是包含类似...

内部IStaffRepository——但这不会破坏 SRP 吗?

我在控制器中的代码是......

StaffMember模型包含...

StaffViewModel看起来像这样...

在数据库中有一个int Department_ID与部门表挂钩的字段。

我的视图中有一个下拉菜单,看起来像...

为这个问题的长度道歉!

0 投票
4 回答
10584 浏览

c# - 创建简单高效值类型的模式

动机:

在阅读 Mark Seemann 关于Code Smell: Automatic Property的博客时,他在接近尾声时说:

底线是自动属性很少适用。事实上,只有当属性的类型是值类型并且所有可能的值都被允许时,它们才合适。

int Temperature举了一个难闻的气味的例子,并建议最好的解决办法是像摄氏度这样的单位特定值类型。所以我决定尝试编写一个自定义的摄氏值类型,它封装了所有的边界检查和类型转换逻辑,作为更加SOLID的练习。

基本要求:

  1. 不可能有无效值
  2. 封装转换操作
  3. 有效应对(相当于 int 的替代)
  4. 尽可能直观地使用(尝试使用 int 的语义)

执行:

测试:

问题:

  • 有没有办法使 MinValue/MaxValue 变为 const 而不是只读?查看 BCL,我喜欢int的元数据定义如何清楚地将 MaxValue 和 MinValue 声明为编译时常量。我怎么能模仿呢?如果不调用构造函数或公开Celsius 存储int 的实现细节,我看不到创建Celsius 对象的方法。
  • 我是否缺少任何可用性功能?
  • 是否有更好的模式来创建自定义单字段值类型?
0 投票
3 回答
2497 浏览

design-patterns - 接口隔离原则是否只是单一责任原则的替代品?

接口隔离原则只是单一职责原则的替代品吗?

我认为,如果我的班级满足 SRP,则无需提取多个接口。

所以 ISP 看起来像是解决方案,以防我们出于某种原因不得不破坏 SRP。

我对吗 ?

0 投票
1 回答
611 浏览

ruby - 如何在设计应用时牢记 SOLID 原则和设计模式

假设 ruby​​ 中的应用程序启动时有两种模式:命令行模式和文件模式

当给定参数ruby​​ myprogram input.txt output.txt时,它会根据输入文件中的一些命令生成输出。同样,当没有提供任何参数时,它会为我们提供命令提示符。使用以下命令。

如何设计这样的应用程序同时牢记 RSpec、TDD、Cucumber、SOLID 和模式。我直接问的是这里的对象应该是什么来设计什么应该是模块(如果适用)等等。?以及如何衡量这里需要测试的内容和不需要测试的内容?在面向对象设计方面设计最合适的机制。

也请参考一些书籍或博客来学习这些面向对象的 ruby​​ 设计原则和实践。

0 投票
1 回答
1891 浏览

oop - “开放/封闭原则”和“依赖倒置原则”有什么区别?

我阅读了有关 SOLID 的文章,但我看不出 OCP 和 DIP 之间有什么区别。看看这个 OCP 的例子:

持有 OCP 的代码也满足 DIP。谁能给我一个包含OCP而不是DIP的代码示例?

0 投票
3 回答
461 浏览

oop - 接口隔离原则何时不适用?SOA?

我正在寻找不应使用接口隔离原则(来自 SOLID)的场景示例。

我看到的唯一提到(但未解释)的是 SOA 上下文中服务接口的情况。但为什么?是不是因为在这种情况下,界面设计上应该是胖的?通过 SOA 法令?

是否还有其他情况表明 ISP 不是一个好主意?

提前致谢。

0 投票
1 回答
87 浏览

design-patterns - 当需求以这种方式演变时,如何划分职责?

首先我的要求是

“我们可以创建一个账户并在上面存钱,当我们购买一件物品时,我们会减少账户”

所以我的 AccountController 看起来像

但是后来有一个新要求“有些人可以有一个免费帐户(所有项目都是免费的),但是如果我们创建一个真实帐户,那么我们就删除了这个免费帐户”

所以我的 controller.Create 变成了

但对我来说,我觉得我应该把它RemoveFreeAccount放在其他地方,但我不知道在哪里,因为IAccountDataSource它只是假设处理数据存储。

0 投票
1 回答
604 浏览

oop - 可以应用 Liskov 替换原则(php 示例)吗?

“子类型必须可以替代它们的基本类型”

假设我已经有一个 Bird 课程,并且:

鸟不会说话,所以我不能用鸟代替鹦鹉。

这只是一个基本示例,但通常扩展类可以比基类做更多的事情。我错过了什么?

0 投票
3 回答
1862 浏览

objective-c - 来自 C#/Java 世界的 iOS 设计模式等价物?

所以我是 iOS 开发的新手,我正在尽我所能学习“最好”的做事方式。(是的,我知道这是一个相对术语)

我来自 C# 和 Java 世界,我们在其中做一些事情,例如通过 IOC 容器注入依赖项,使用存储库模式来抽象数据访问,使用域服务和对象来封装业务数据和行为等。这些都是我在 iOS 开发中还没有看到。(也许我找错地方了)

我意识到,Objective-C 是 C 的超集,是一种动态/松散类型的语言,当涉及到良好的设计实践时,它可能会大大改变游戏规则。任何人都可以向我指出一些书籍/博客/其他的方向,这些书籍/博客/其他可以帮助我从一个强类型、受管理的环境到这个新世界的精神飞跃,同时保持我的设计灵活并遵守 SOLID 原则吗?

编辑 - 我想在这里说清楚。 我不是在问如何学习 Cocoa 框架以及作为一门语言的 Objective-C 的来龙去脉。我在这方面找到了很多资源。我希望将此提升到一个新的水平,开始进行 TDD 并确保我正在构建的项目将易于扩展和维护。

0 投票
6 回答
7194 浏览

oop - 接口隔离原则——程序到接口

我正在阅读有关 SOLID 和其他设计原则的信息。我认为 ISP 与“编程接口,而不是实现”相同。但看起来这些是不同的原则?

有区别吗?