SOLID,SRP,IComparable

时间:2016-08-21 12:24:35

标签: c# interface solid-principles

好的,在单个类上实施 IComparable和其他接口(如 IDisposable )违反了 SRP原则

SRP 声明每个班级都应该实现信号责任,并且方法应该在很大程度上相互联系,以实现内聚类

不能比较另一个责任吗?

一些澄清将不胜感激。

2 个答案:

答案 0 :(得分:4)

如果我是你,我会努力坚持SRP,但不是那么严格,因为努力最终会适得其反。所以现在说,你该怎么办?您可以实现IComparable并将对比完全封装在对象中,或者使用单独的比较器并在其中实现比较逻辑。现在进行比较,就SRP而言,如果比较是相当基础的并且不应该进行更改,我将实现IComparable并完成它。如果您可以合理地预见未来会有一些变化,或者如果比较是依赖于用例,那么我会选择比较器路线。最终的目标是开发封闭的组件并通过组合它们进行合作,因此如果比较几乎没有机会改变,组件可以关闭,您又不会再听到它。您还可以在代码中评论IComparable的使用,如果将来发生某些变化,请切换到使用比较器进行编写,因为据说未发生的更改确实发生了。

答案 1 :(得分:3)

我认为IComparable和IDisposable的强制性根本不是的责任,因此不会违反SRP。

在SRP环境中,责任在于系统的交互者(即用户,角色或外部系统)。如果您的系统具有业务需求文档,则应至少在功能或非功能需求中推断出所有职责。如果没有,请问自己哪个企业主会要求您更改对象自行处理的方式。

在我学习了SRC之后开展的第一个项目中,我们将其解释为"每个班级的一个公共方法"并将其作为一项硬性规则应用。虽然这使得遵守"遵守"变得容易,但我们最终得到的代码远比它需要的复杂得多。

如果你的IComparable / IDisposable实现需要改变,那么这个改变将由你的类的功能(业务)部分驱动,也需要改变(同时和相同的原因)。

相关问题