C# 实体,SRP,i可比较

C# 实体,SRP,i可比较,c#,interface,solid-principles,C#,Interface,Solid Principles,好的,在单个类上实现IComparable和其他接口(如IDisposable)是否违反了SRP原则 SRP指出,每个班级都应该实施一个单一的职责,并且方法应该高度互联,以实现有凝聚力的班级 比较不是另一种责任吗 如果我是你,我会尽量遵守SRP,但不会严格到最后适得其反的程度。既然如此,你该怎么办?要么实现IComparable并将比较完全封装在对象中,要么使用单独的比较器并在其中实现比较逻辑。现在,对于比较,就SRP而言,如果比较是相当基本的,不应该受到更改,我将实现IComparable并使

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

SRP指出,每个班级都应该实施一个单一的职责,并且方法应该高度互联,以实现有凝聚力的班级

比较不是另一种责任吗


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

我认为,IComparable和IDisposable的实现根本不负任何责任,因此不会违反SRP

在SRP的上下文中,您的系统的交互者(即用户、角色或外部系统)负有责任。如果您的系统具有业务需求文档,则至少应在功能性或非功能性需求中推断出所有责任。如果不是,问问你自己,哪个企业主会要求你改变一个对象如何处理自己

在我学习了SRC之后从事的第一个项目中,我们将其解释为“每个类一个公共方法”,并将其作为硬规则应用。虽然这使得保持“遵从性”变得容易,但我们最终得到的代码远比需要的复杂


如果您的IComparable/IDisposable实现需要更改,那么更改将由您的类的功能(业务)部分驱动,该部分也需要更改(同时,出于相同的原因)。

谢谢,因此遵守这些原则不应该如此严格。这要视情况而定。实体的比较呢?实体是一种工具,而不是达到目的的手段。此外,你通常会在严格和宽容之间做出选择。你不能预见所有的变化,你也应该保持简单。依我拙见,严格的SRP会让你过度工程化。就实体而言,如果您所说的实体是指持久对象,那么我前面写的内容仍然适用。这取决于变化的相似性和对某些用例的依赖性,将来同一个实体会有不同的用例进行不同的比较吗?那么ISP呢?SRP和ISP都是SOLID的一部分,因此不应该冲突。