【发布时间】:2017-02-17 14:02:26
【问题描述】:
请看下面的代码:
public interface ICultureService
{
List<Culture> GetCultures();
bool IsCultureSupported(Culture culture);
Culture GetFallbackCulture();
}
我们发现大多数消费者首先调用 IsCultureSupported 来验证他们的文化是否受支持。如果不支持文化,他们会调用 GetFallbackCulture():
public CallingMethod()
{
if(!cultureManager.IsCultureSupported(currentCulture))
{
currentCulture=cultureManager.GetFallbackCulture();
}
.
.
.
}
根据单一职责原则(和其他 OOP 规则),是否可以引入一个功能(在 ICultureService 及其实现中),例如:
function GetFallbackCultureIfInvalid(Culture culture)
{
if(this.IsCultureSupported(culture)
{
return this.FallbackCulture();
}
}
【问题讨论】:
-
1. if( ! this.IsCultureSupported(culture)) ?
-
2.如果支持怎么办?回归文化?
-
@KonstantinL,是的,如果支持,返回相同的。
-
你应该在你的问题中修复它(并添加缩进)。 +++ 一般来说,我建议不要采取任何原则。这是
ICultureService,所以 SRP 告诉我“它负责所有的文化管理(仅此而已)”。它并不禁止我添加方法。它只禁止直接处理不相关的问题。 -
@Pragmatic 您似乎是一个足够大的成员,知道您可以投票并接受对您有帮助的答案。如果您需要进一步说明,请对我的回答发表评论。老实说,这个问题有很多缺失的信息,但我试图用所有缺失的信息给你一个合理的答案。
标签: oop design-patterns object-oriented-analysis single-responsibility-principle tell-dont-ask