问题标签 [single-responsibility-principle]
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.
java - 伪向后生成器模式?
在遗留代码库中,我有一个非常大的类,其中包含太多字段/职责。想象这是一个 Pizza 对象。
它具有高度精细的字段,例如:
- 有意大利辣香肠
- 有香肠
- 有甜椒
我知道,当这三个字段都成立时,我们就有了一个至尊披萨。但是,这个类不开放扩展或更改,所以我不能添加 PizzaType 或 isSupreme() 等。整个代码库中的人们到处重复相同的if(a && b && c) then isSupreme)
逻辑。这个问题出现在很多概念上,所以我正在寻找一种方法来将此对象解构为许多子对象,例如伪向后的构建器模式。
这是正确的方法吗?这种模式是否已经存在?
asp-classic - 我的验证者应该可以访问我的整个模型吗?
正如标题所述,我想知道我的验证类是否可以访问我模型中的所有属性。理想情况下,我想这样做,因为某些字段需要 10 多个其他字段来验证它是否有效。我可以但宁愿没有具有 10 多个参数的函数。或者这会使模型和验证器过于耦合?这是我的意思的一个小例子。然而,这段代码不起作用,因为它给出了一个无限循环!
如果我是对的并且这是一个好主意,我怎样才能用获取属性 UserID 来解决无限循环?
谢谢你。
解决方案
虽然不完美,但比我开始的要好得多。基本上,我决定使用装饰器模式。我的下一步很可能从每个验证中删除 Init() 函数,并将其替换为 SetModel() 函数或其他东西。这样每个验证都可以访问我模型中的每个属性。
谢谢大家。
principles - SRP 和“变革轴”?
我正在阅读Bob Martin 的 OOD 原则,特别是 SRP 文本,我非常了解它所说的精神,但我不太理解链接的第 2 页(本书第 150 页)中的特定措辞):
我转述:
将这两个职责分成不同的类很重要,因为每个职责都是变化的轴。
这里所说的“变化轴”究竟是什么意思?
oop - 如何避免创建庞大的类
Stackoverflow 用户,
您如何避免使用大型主体方法创建大型类。当最后期限很紧时,您最终会尝试将事物拼凑在一起,最终会变得一团糟,需要重构。
一种方法是从测试驱动开发开始,这有助于良好的类设计和 SRP(单一责任原则)。
我还看到开发人员双击控件并在触发的事件方法中逐行输入。
有什么建议么?
c# - 在处理静态方法时保持代码在同一级别
这可能有点主观,但我想听听您对我目前情况的看法。我有一个用于序列化/反序列化对象的类。
我只喜欢这种方法,因为它将两个功能保持在同一水平。但是,我的目标是避免使用静态方法(在可行的情况下)。我也觉得我可能违反了 SRP,但这个对象的主要目标是它可以从 xml 字符串中序列化/反序列化。
在这种情况下使用静态方法有什么想法吗?我应该只制作ToXmlString
非静态的,但留下FromXmlString
静态的吗?我应该创建一个只处理 MyClass 序列化的新类吗?
编辑:
我在这里讨论的类是一个简单的传输对象。它用于从第三方工具保存/恢复值。
谢谢!
oop - 单一职责原则 - 一个很难看到的例子?
我刚刚阅读了关于单一职责原则的内容,Robert C. Martin 曾指出,有时很难看出一个类有多个职责。
任何人都可以提供这样一个类的例子吗?
asp.net-mvc - ASP.NET MVC 向最终用户显示操作成功
我见过的大多数 ASP.NET MVC 示例都描述了用户正在查看对象(或对象集合)然后从该页面移动到显示用户完成的表单的页面的场景。在提交具有良好输入的表单后,用户将被重定向回显示对象(或列表)的页面,并且用户可以看到他们的更改是成功的。
我遇到了一个场景,每个业务规则都没有视图或列表页面。
在 ASP.NET MVC 中针对这种情况有哪些好的方法?
在过去使用经典 ASP 和 ASP.NET 时,我会处理输入,然后向用户显示成功消息或有错误的表单——所有这些都来自同一页面。这似乎违背了最佳实践(SRP、视图中没有逻辑等)。
一种简单的方法是重定向到一个新页面,告诉用户他们的更改是成功的,然后用户可以随时访问该页面。如果我开始输入逻辑来防止这种情况(即临时数据),那么解决方案就会开始变得肮脏。
我可以重定向到登录页面,但没有确认。也许我可以依靠一个消息系统,在最终用户返回登录页面时向他们显示确认信息?
oop - 在可扩展的类层次结构中实现单一职责原则的技术/模式
例如,单一职责原则说,一个Invoice
类不应包含打印自身的代码。打印应该被分成不同的类。
但是假设您Invoice
在软件的不同层中有一个类层次结构:
可以使用哪些技术或设计模式来分离印刷责任?
想法:
- 一个单独的类,带有一个很大的
if
语句,用于测试每个子类Invoice
并运行适当的打印代码。这似乎是错误的。 - 访客模式。问题是访问者界面需要存在于核心层中,并引用自定义层中的类。我希望能够通过修改核心层在自定义层中添加新的子类。
iphone - 使用 UIViewController 维护单一职责原则 (SRP)
遵循 Apple 的指导方针,我为 iPhone 应用程序的每个屏幕创建了一个 UIViewController 子类。然而,我一直发现这些类变得非常大,无论是纯粹的代码行数还是成员变量的数量。
根据定义,它们最终要负责许多不同的问题(例如视图生命周期、视图和模型之间的中介、有时是触摸处理、控制逻辑、管理警报和其他 UI 状态)。
这不仅违反了单一职责原则,而且还导致大量代码几乎不可能进行单元测试。
您倾向于将哪些职责/关注点划分为新的类别?在 UIViewController 子类的情况下,你认为什么样的职责是干净分离的好候选?