0

请查看以下代码:

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();
     }
}
4

1 回答 1

0

根据单一职责原则(和其他 OOP 规则),是否可以引入如下功能(在 CultureManager 中):

您所指的是所谓的告诉不问原则,而不是单一责任原则。添加GetFallbackCultureIfInvalid函数实际上使客户端代码更具可读性。您还应该降低 的可见性,IsCultureSupported以便客户端代码不再看到此方法。

也就是说,它看起来像是CultureManager一个实现,CultureService所以添加一个名为GetFallbackCultureIfInvalidin的新方法CultureManager不是接口的一部分是没有意义的CultureService。你应该做的是坚持一个调用GetFallbackCulture的方法,CultureManager如果满足要求的条件,让它返回一个后备文化:

Culture GetFallbackCulture(Culture culture) {
    Culture fallBackCulture = culture;
    if(!this.IsCultureSupported(culture) {
      fallBackCulture = this.FallbackCulture();
    } 

    return fallBackCulture;
}
于 2017-02-17T14:51:59.840 回答