请看以下代码:
public interface ICultureService
{
List<Culture> GetCultures();
bool IsCultureSupported(Culture culture);
Culture GetFallbackCulture();
}我们发现,大多数消费者首先调用IsCultureSupported来验证他们的文化是否受支持。如果不支持区域性,则调用GetFallbackCulture():
public CallingMethod()
{
if(!cultureManager.IsCultureSupported(currentCulture))
{
currentCulture=cultureManager.GetFallbackCulture();
}
.
.
.
}根据单一责任原则(和其他OOPs规则),是否可以引入一个函数(在ICultureService及其实现中),例如:
function GetFallbackCultureIfInvalid(Culture culture)
{
if(this.IsCultureSupported(culture)
{
return this.FallbackCulture();
}
}发布于 2017-02-17 14:51:59
根据单一责任原则(和其他OOPs规则),是否可以(在CultureManager中)引入如下功能:
你指的是“告诉-不问”原则,而不是单一责任原则。添加GetFallbackCultureIfInvalid函数实际上可以提高客户端代码的可读性。您还应该降低IsCultureSupported的可见性,以便该方法不再对客户端代码可见。
尽管如此,看起来CultureManager是CultureService的一个实现,所以在CultureManager中添加一个名为GetFallbackCultureIfInvalid的新方法是没有意义的,因为它不是CultureService接口的一部分。您应该做的是坚持在CultureManager中使用一个名为CultureManager的方法,如果满足了所需的条件,就让它返回一个后退的区域性:
Culture GetFallbackCulture(Culture culture) {
Culture fallBackCulture = culture;
if(!this.IsCultureSupported(culture) {
fallBackCulture = this.FallbackCulture();
}
return fallBackCulture;
}https://stackoverflow.com/questions/42299828
复制相似问题