Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Oop API中的单一责任原则_Oop_Design Patterns_Object Oriented Analysis_Single Responsibility Principle_Tell Dont Ask - Fatal编程技术网

Oop API中的单一责任原则

Oop API中的单一责任原则,oop,design-patterns,object-oriented-analysis,single-responsibility-principle,tell-dont-ask,Oop,Design Patterns,Object Oriented Analysis,Single Responsibility Principle,Tell Dont Ask,请查看以下代码: public interface ICultureService { List<Culture> GetCultures(); bool IsCultureSupported(Culture culture); Culture GetFallbackCulture(); } 根据单一责任原则(以及其他OOPs规则),是否可以引入如下功能(在ICultureService及其实现中): 根据单一责任原则(以及其他OOPs规则),是否可以

请查看以下代码:

public interface ICultureService
{
     List<Culture> GetCultures();
     bool IsCultureSupported(Culture culture);
     Culture GetFallbackCulture();
}
根据单一责任原则(以及其他OOPs规则),是否可以引入如下功能(在ICultureService及其实现中):

根据单一责任原则(以及其他OOPs规则),是否可以(在CultureManager中)引入如下函数:

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

也就是说,看起来
CultureManager
CultureService
的一个实现,因此在
CultureManager
中添加名为
GetFallbackCultureFinValid
的新方法是没有意义的,因为它不是
CultureService
接口的一部分。您应该坚持使用
CultureManager
中名为
GetFallbackCulture
的单一方法,并在满足所需条件时让它返回一个fallback区域性:

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

    return fallBackCulture;
}

1.如果(!this.IsCultureSupported(culture))?2。如果它得到支持呢?返回区域性?@KonstantinL,是的,如果支持,则返回相同的区域性。您应该在问题中修复它(并添加缩进)。++总的来说,我建议不要把任何原则走得太远。这是一个
ICultureService
,因此SRP告诉我“它负责所有的文化管理(除此之外什么都不做)”。它并不禁止我添加方法。它只禁止直接处理不相关的问题,因为你似乎是一个足够大的成员,知道你可以投票并接受对你有帮助的答案。如果您需要进一步澄清,请对我的回答发表评论。老实说,这个问题有很多遗漏信息,但我试图用所有遗漏的信息给你一个合理的答案。CKK,你是对的,CultureManager将实现CultureServerice,并且此方法将添加到这两个问题中。您建议的方法不符合要求,我们需要传递区域性并检查其是否受支持,如果不返回受支持的方法。谢谢您的回答,但我不相信您的方法GetFallbackCulture,因为名称表明这将返回FallbackCulture,但情况并非总是如此。它可以返回相同的文化(这是传递给它的,而不是回退的)。如果我是API设计器,我将使用一个方法,并在不支持
区域性的情况下,将其行为记录为获取
回退区域性
。否则返回
区域性
参数。。您很少会发现API开发人员使用名称
getSomethingFinValid
创建方法。
function GetFallbackCultureIfInvalid(Culture culture)
{
     if(this.IsCultureSupported(culture)
     {
          return this.FallbackCulture();
     }
}
Culture GetFallbackCulture(Culture culture) {
    Culture fallBackCulture = culture;
    if(!this.IsCultureSupported(culture) {
      fallBackCulture = this.FallbackCulture();
    } 

    return fallBackCulture;
}