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;
}