请看下面这段代码:
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();
}
}
答案 0 :(得分:0)
根据单一责任原则(以及其他OOP规则),可以引入一个函数(在CultureManager中),如:
您所指的是 Tell-Would-Ask 原则,而不是单一责任原则。添加GetFallbackCultureIfInvalid
函数实际上使客户端代码更具可读性。您还应该降低IsCultureSupported
的可见性,以便客户端代码不再显示此方法。
也就是说,看起来CultureManager
是CultureService
的实现,所以在GetFallbackCultureIfInvalid
中添加一个名为CultureManager
的新方法是没有意义的CultureService
接口的一部分。您应该做的是坚持GetFallbackCulture
中名为CultureManager
的单一方法,如果满足所需条件,则让它返回后备文化:
Culture GetFallbackCulture(Culture culture) {
Culture fallBackCulture = culture;
if(!this.IsCultureSupported(culture) {
fallBackCulture = this.FallbackCulture();
}
return fallBackCulture;
}