gpt4 book ai didi

class-design - 单一职责原则 : do all public methods in a class have to use all class dependencies?

转载 作者:行者123 更新时间:2023-12-04 00:57:47 25 4
gpt4 key购买 nike

假设我有一个如下所示的类:

internal class SomeClass
{
IDependency _someDependency;

...


internal string SomeFunctionality_MakesUseofIDependency()
{
...
}
}

然后我想添加相关的功能,但 利用不同的依赖来实现其目的 .也许类似于以下内容:
internal class SomeClass
{
IDependency _someDependency;

IDependency2 _someDependency2;

...


internal string SomeFunctionality_MakesUseofIDependency()
{
...
}

internal string OtherFunctionality_MakesUseOfIDependency2()
{
...
}
}

当我为这个新功能编写单元测试(或更新我对现有功能的单元测试)时,我发现自己创建了一个新的 SomeClass 实例(SUT),同时为我不需要的依赖项传入 null对于我要测试的特定功能。

这对我来说似乎是一种难闻的气味,但我发现自己走上这条路的真正原因是因为我发现自己为我引入的每一个新功能都创建了新的类。这似乎也是一件坏事,所以我开始尝试将类似的功能组合在一起。

我的问题:一个类的所有依赖项是否应该被它的所有功能所消耗,即如果不同的功能位使用不同的依赖项,那么这些可能应该存在于单独的类中是一个线索?

最佳答案

当每个实例方法都接触到每个实例变量时,该类就具有最大的内聚性。当没有实例方法与任何其他实例方法共享实例变量时,该类具有最小内聚性。虽然我们确实喜欢高凝聚力,但也确实适用 80-20 规则。获得最后一点凝聚力可能需要付出巨大的努力。

通常,如果您有不使用某些变量的方法,那是一种气味。但是一点点气味并不足以完全重构类。这是值得关注和关注的事情,但我不建议立即采取行动。

关于class-design - 单一职责原则 : do all public methods in a class have to use all class dependencies?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1118463/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com