单一责任原则与关注点分离有什么区别?
single-responsibility-principle separation-of-concerns solid-principles
我正在努力学习单一责任原则(SRP),但这是非常困难的,因为我很难弄清楚我应该从一个班级中删除的时间和内容,以及我应该放置/组织它的地方.
我正在谷歌搜索一些材料和代码示例,但我找到的大多数材料,而不是让它更容易理解,使它很难理解.
例如,如果我有一个用户列表,并且从该列表中我有一个叫做控制的类,可以执行很多事情,例如当用户进/出时发送问候和再见消息,验证用户应该能够进入的天气并踢他,接收用户命令和消息等.
从示例中你不需要太多了解我已经在一个类中做了太多但是我不清楚如何在之后拆分和重新组织它.
如果我理解SRP,我会有一个加入频道的课程,问候和再见,一个用户验证课程,一个阅读命令的课程,对吧?
但是我在哪里以及如何使用踢球?
我有验证课程,所以我相信我会在那里进行各种用户验证,包括天气或者不应该踢用户.
因此,kick函数将位于通道连接类中,并在验证失败时被调用?
例如:
public void UserJoin(User user)
{
if (verify.CanJoin(user))
{
messages.Greeting(user);
}
else
{
this.kick(user);
}
}
Run Code Online (Sandbox Code Playgroud)
如果你们可以借助易于理解的C#在线和免费资料,或者通过向我展示如何分割引用的示例以及可能的一些示例代码,建议等,我将不胜感激.
如何在SOLID "接口分离原则",从"单一职责原则"有什么不同?
ISP将非常大的接口拆分为更小和更具体的接口,这样客户端只需知道它们感兴趣的方法
但是,对我来说,这听起来只是将SRP应用于接口和类.毕竟,如果一个界面只负责一个概念性的东西,那么你将无法进一步分解它.
我错过了什么,或者是SR与SRP有多余?如果没有,那么ISP是什么意味着SRP没有?
oop design-patterns single-responsibility-principle solid-principles interface-segregation-principle
我知道"班级有一个改变的理由".现在,到底是什么?是否有一些气味/迹象可以说明该课程没有一个责任?或者,真正的答案是否可以隐藏在YAGNI中,并且只有在您的班级第一次更改时才重构一项责任?
有人能给我一个单一责任原则的例子吗?我试图理解,在实践中,一个班级有一个单一的责任,因为我担心我可能每天都违反这条规则.
oop single-responsibility-principle definition design-principles solid-principles
界面隔离原则只是单一责任原则的替代吗?
我认为,如果我的类满足SRP,则无需提取多个接口.
所以ISP看起来像解决方案,以防我们因某些原因打破SRP.
我对吗 ?
design-patterns single-responsibility-principle solid-principles interface-segregation-principle
信息专家,Tell-Don't-Ask和SRP通常被一起提及为最佳实践.但我认为他们存在分歧.这就是我所说的.
有利于SRP但违反Tell-Don't-Ask&Info-Expert的代码:
Customer bob = ...;
// TransferObjectFactory has to use Customer's accessors to do its work,
// violates Tell Don't Ask
CustomerDTO dto = TransferObjectFactory.createFrom(bob);
Run Code Online (Sandbox Code Playgroud)
有利于Tell-Don't-Ask和Info-Expert但违反SRP的代码:
Customer bob = ...;
// Now Customer is doing more than just representing the domain concept of Customer,
// violates SRP
CustomerDTO dto = bob.toDTO();
Run Code Online (Sandbox Code Playgroud)
请告诉我这些做法如何能够和平共处.
术语的定义,
信息专家:具有操作所需数据的对象应承载该操作.
告诉不要问:不要向对象询问数据以便工作; 告诉对象做这项工作.
单一责任原则:每个对象应具有狭义的责任.
oop single-responsibility-principle tell-dont-ask solid-principles
在SRP中,"责任"通常被描述为"改变的理由",因此每个类(或对象?)应该只有一个人应该去那里并改变它的原因.
但是,如果你把它变成极端细粒度,你可以说一个对象将两个数字加在一起是一个责任,也是一个可能的改变原因.因此,对象不应包含其他逻辑,因为它会产生另一个改变的原因.
我很好奇是否有人有任何"范围"策略,单一责任原则稍微不那么客观?
使用当前的实践(至少使用WPF和Silverlight),我们在视图模型中看到通过命令绑定绑定的视图,或者我们至少看到视图模型中处理的视图事件.这似乎违反了SRP,因为视图模型不仅模拟视图状态,而且响应视图(用户).其他人已经询问如何构建视图模型而不违反SRP或询问他们的实现是否这样做(最后是MVC中的控制器,但大致类似).
那么目前的做法是否违反了SRP?或者"视图模型"真的是一组不违反SRP的东西?为了解决这个问题,似乎我们需要知道什么是单一责任,或者如果概念中有多个责任,个别职责是否分开,符合SRP.我不确定.
[View] ViewModel是一个"视图模型",意思是它是View的抽象,也用于视图和模型之间的数据绑定
对于SRP而言,这似乎已经足够了,但后来这篇文章说明了(我强调了)
[ViewModel]充当数据绑定器/转换器,将模型信息更改为View信息,并将命令从View传递到模型
在一篇关于视图模型角色的Prism博客文章中,作者说(再次,我的重点)
它归结为视图模型是以下的组合:
- 视图的抽象
- 命令
- 价值转换器
- 查看状态
我确定我错过了许多定义,但它们似乎属于以下类别:
如果你很好奇,我"关心"这个因为(2)感觉正确,但似乎与普遍的实施相反.
silverlight wpf single-responsibility-principle mvvm viewmodel
single-responsibility-principle ×10
oop ×6
interface-segregation-principle ×2
c# ×1
definition ×1
mvvm ×1
silverlight ×1
viewmodel ×1
wpf ×1