问题标签 [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.
asp.net-mvc-3 - 如何在仅使用一个 DbContext 实例时处理不同的职责
我一直在寻找我的问题的答案,但找不到答案,主要是因为我真的不知道如何表达它!
我首先在玩 EF 代码,并尝试在使用依赖注入的同时实现某种存储库模式(感谢 Unity)。我还试图保持 SOLID(至少是 SRP 部分),因为我拥有IStaffRepository
和IDepartmentRepository
接口,这些接口又实现IRepository<TEntity>
了提供基本CRUD
方法的接口。
我的问题是,当我需要更新员工的部门时,如何保持 SRP?
我已经读过,由于可能的内存泄漏,对所有存储库使用单个DbContext
实例是不好的做法,所以我不能简单地调用IDepartmentRepository
来获取新部门,因为这将使用 my DbContext
.
对我来说显而易见的解决方案是包含类似...
内部IStaffRepository
——但这不会破坏 SRP 吗?
我在控制器中的代码是......
该StaffMember
模型包含...
StaffViewModel
看起来像这样...
在数据库中有一个int Department_ID
与部门表挂钩的字段。
我的视图中有一个下拉菜单,看起来像...
为这个问题的长度道歉!
c# - 创建简单高效值类型的模式
动机:
在阅读 Mark Seemann 关于Code Smell: Automatic Property的博客时,他在接近尾声时说:
底线是自动属性很少适用。事实上,只有当属性的类型是值类型并且所有可能的值都被允许时,它们才合适。
他int Temperature
举了一个难闻的气味的例子,并建议最好的解决办法是像摄氏度这样的单位特定值类型。所以我决定尝试编写一个自定义的摄氏值类型,它封装了所有的边界检查和类型转换逻辑,作为更加SOLID的练习。
基本要求:
- 不可能有无效值
- 封装转换操作
- 有效应对(相当于 int 的替代)
- 尽可能直观地使用(尝试使用 int 的语义)
执行:
测试:
问题:
- 有没有办法使 MinValue/MaxValue 变为 const 而不是只读?查看 BCL,我喜欢int的元数据定义如何清楚地将 MaxValue 和 MinValue 声明为编译时常量。我怎么能模仿呢?如果不调用构造函数或公开Celsius 存储int 的实现细节,我看不到创建Celsius 对象的方法。
- 我是否缺少任何可用性功能?
- 是否有更好的模式来创建自定义单字段值类型?
design-patterns - 接口隔离原则是否只是单一责任原则的替代品?
接口隔离原则只是单一职责原则的替代品吗?
我认为,如果我的班级满足 SRP,则无需提取多个接口。
所以 ISP 看起来像是解决方案,以防我们出于某种原因不得不破坏 SRP。
我对吗 ?
ruby - 如何在设计应用时牢记 SOLID 原则和设计模式
假设 ruby 中的应用程序启动时有两种模式:命令行模式和文件模式
当给定参数ruby myprogram input.txt output.txt时,它会根据输入文件中的一些命令生成输出。同样,当没有提供任何参数时,它会为我们提供命令提示符。使用以下命令。
如何设计这样的应用程序同时牢记 RSpec、TDD、Cucumber、SOLID 和模式。我直接问的是这里的对象应该是什么来设计什么应该是模块(如果适用)等等。?以及如何衡量这里需要测试的内容和不需要测试的内容?在面向对象设计方面设计最合适的机制。
也请参考一些书籍或博客来学习这些面向对象的 ruby 设计原则和实践。
oop - “开放/封闭原则”和“依赖倒置原则”有什么区别?
我阅读了有关 SOLID 的文章,但我看不出 OCP 和 DIP 之间有什么区别。看看这个 OCP 的例子:
持有 OCP 的代码也满足 DIP。谁能给我一个包含OCP而不是DIP的代码示例?
oop - 接口隔离原则何时不适用?SOA?
我正在寻找不应使用接口隔离原则(来自 SOLID)的场景示例。
我看到的唯一提到(但未解释)的是 SOA 上下文中服务接口的情况。但为什么?是不是因为在这种情况下,界面设计上应该是胖的?通过 SOA 法令?
是否还有其他情况表明 ISP 不是一个好主意?
提前致谢。
design-patterns - 当需求以这种方式演变时,如何划分职责?
首先我的要求是
“我们可以创建一个账户并在上面存钱,当我们购买一件物品时,我们会减少账户”
所以我的 AccountController 看起来像
但是后来有一个新要求“有些人可以有一个免费帐户(所有项目都是免费的),但是如果我们创建一个真实帐户,那么我们就删除了这个免费帐户”
所以我的 controller.Create 变成了
但对我来说,我觉得我应该把它RemoveFreeAccount
放在其他地方,但我不知道在哪里,因为IAccountDataSource
它只是假设处理数据存储。
oop - 可以应用 Liskov 替换原则(php 示例)吗?
“子类型必须可以替代它们的基本类型”
假设我已经有一个 Bird 课程,并且:
鸟不会说话,所以我不能用鸟代替鹦鹉。
这只是一个基本示例,但通常扩展类可以比基类做更多的事情。我错过了什么?
objective-c - 来自 C#/Java 世界的 iOS 设计模式等价物?
所以我是 iOS 开发的新手,我正在尽我所能学习“最好”的做事方式。(是的,我知道这是一个相对术语)
我来自 C# 和 Java 世界,我们在其中做一些事情,例如通过 IOC 容器注入依赖项,使用存储库模式来抽象数据访问,使用域服务和对象来封装业务数据和行为等。这些都是我在 iOS 开发中还没有看到。(也许我找错地方了)
我意识到,Objective-C 是 C 的超集,是一种动态/松散类型的语言,当涉及到良好的设计实践时,它可能会大大改变游戏规则。任何人都可以向我指出一些书籍/博客/其他的方向,这些书籍/博客/其他可以帮助我从一个强类型、受管理的环境到这个新世界的精神飞跃,同时保持我的设计灵活并遵守 SOLID 原则吗?
编辑 - 我想在这里说清楚。 我不是在问如何学习 Cocoa 框架以及作为一门语言的 Objective-C 的来龙去脉。我在这方面找到了很多资源。我希望将此提升到一个新的水平,开始进行 TDD 并确保我正在构建的项目将易于扩展和维护。
oop - 接口隔离原则——程序到接口
我正在阅读有关 SOLID 和其他设计原则的信息。我认为 ISP 与“编程接口,而不是实现”相同。但看起来这些是不同的原则?
有区别吗?