C# 具有多个方法的类的设计模式

C# 具有多个方法的类的设计模式,c#,oop,methods,solid-principles,C#,Oop,Methods,Solid Principles,我正在构建一个调用各种API的应用程序,作为一个了解坚实原则和类应该如何承担单一责任的新手,我希望在设计类时牢记坚实原则 Internal class API_Caller { public static getInfor1() { // do something in here } public static getInfo2() {// do something } public static getInfo3() {// do something} }

我正在构建一个调用各种API的应用程序,作为一个了解坚实原则和类应该如何承担单一责任的新手,我希望在设计类时牢记坚实原则

Internal class API_Caller
{
  public static getInfor1()
  {
    // do something in here
  }
  public static getInfo2()
  {// do something }
  public static getInfo3()
  {// do something}

}
如果我的班级有不止一种方法,那么它是否遵循固体和

另一种方法是,如果所有方法都是私有的,那么我将尽可能少地公开()但这是一种好的设计模式,还是我应该将这些方法分成不同的类

internal class API_Caller
{
    public Static CALL_APIs (API_Name)
    {
        switch (API_Name)
        {
            case "getinfo1":
              getInfor1();
              break;
            case "getinfo2":
              getinfo2();
              break;
        }
    }
    private static getInfor1(){// do something}
    private static getInfo2(){// do something}
    private static getInfo3(){// do something}
}

这三种方法相关吗?它们是彼此的替代品吗?它们是否独立变化

如果每种方法都代表了实现同一目标的不同方式,并且可以单独使用,那么使用可以将它们分开。假设你从谷歌或亚马逊获得天气预报,你可以这样做:

interface IWeatherProvider 
{ 
   //SomeReturnType Get();
}

class AmazonWeatherProvider : IWeatherProvider  
{ 
    // Implementation
}

class GoogleWeatherProvider : IWeatherProvider  
{ 
    // Implementation
}
在上面的例子中,每个类代表了实现相同职责的不同方式

但是如果您有两种方法:
GetWeeklyForecast
GetDailyForecast
。您可以在同一类(或接口)中使用这两个。这通常不会违反SRP,他们都负有相同的责任(获取天气预报)

如果这些方法完全不相关,并且可能由于不同的原因或由不同的客户机使用而更改,那么您也可以将它们划分为不同的类



注意你是如何看待公共/私有方法的。您可以根据需要公开任意数量的公共方法(这些是您与使用API的任何人共享的契约)。如果更改私有方法的参数类型,则不会有破坏性的更改。但是,如果您更改公共方法的参数类型,您将有一个突破性的更改!您的所有客户现在都需要更改其代码

这三种方法相关吗?它们是彼此的替代品吗?它们是否独立变化

如果每种方法都代表了实现同一目标的不同方式,并且可以单独使用,那么使用可以将它们分开。假设你从谷歌或亚马逊获得天气预报,你可以这样做:

interface IWeatherProvider 
{ 
   //SomeReturnType Get();
}

class AmazonWeatherProvider : IWeatherProvider  
{ 
    // Implementation
}

class GoogleWeatherProvider : IWeatherProvider  
{ 
    // Implementation
}
在上面的例子中,每个类代表了实现相同职责的不同方式

但是如果您有两种方法:
GetWeeklyForecast
GetDailyForecast
。您可以在同一类(或接口)中使用这两个。这通常不会违反SRP,他们都负有相同的责任(获取天气预报)

如果这些方法完全不相关,并且可能由于不同的原因或由不同的客户机使用而更改,那么您也可以将它们划分为不同的类



注意你是如何看待公共/私有方法的。您可以根据需要公开任意数量的公共方法(这些是您与使用API的任何人共享的契约)。如果更改私有方法的参数类型,则不会有破坏性的更改。但是,如果您更改公共方法的参数类型,您将有一个突破性的更改!您的所有客户现在都需要更改其代码

它被称为单一责任,而不是单一方法。一个类可以有多个公共方法,并且只有一个职责。SOLID只是常识。您不会“仅仅因为”在不同的类中提取方法。你这样做是因为他们在一起看起来很丑——他们所做的事情完全不同,很明显他们不应该在一起。或者一个单一的方法太长,做了太多的事情,很明显,它应该是分开的。我投票结束这个问题,作为离题,因为它属于这个问题。它不是一个强硬的路线,什么是,不是一个“单一的责任”。我发现最好的解释是,一个班级应该只有一个改变的理由,但那就是工资。我还想看看它们是否和模式一样重要。想想谁会使用这个接口——如果GETIfF1和GETInFrO2不能一起使用,那么考虑接口隔离原则,它被称为单一责任,而不是单一方法。一个类可以有多个公共方法,并且只有一个职责。SOLID只是常识。您不会“仅仅因为”在不同的类中提取方法。你这样做是因为他们在一起看起来很丑——他们所做的事情完全不同,很明显他们不应该在一起。或者一个单一的方法太长,做了太多的事情,很明显,它应该是分开的。我投票结束这个问题,作为离题,因为它属于这个问题。它不是一个强硬的路线,什么是,不是一个“单一的责任”。我发现最好的解释是,一个班级应该只有一个改变的理由,但那就是工资。我发现它们和模式一样重要。想想谁会使用这个接口——如果getInfor1和getInfor2不能一起使用,考虑接口隔离原则,用私有方法并公开一种称为私有的公共方法是好的经验法则吗??@ RezaDel,我没有听说过这样的规则。您可以根据需要公开尽可能多的公共方法(这些是您与使用API的人共享的契约)。如果更改私有方法的参数类型,则不会有破坏性的更改。但是,如果您更改公共方法的参数类型,您将有一个突破性的更改!您的所有客户现在都需要更改其代码!让方法私有,只公开一个称为privates one的公共方法,这是一个好的经验法则吗?@RezaDel我没有听说过这样的规则。您可以根据需要公开尽可能多的公共方法(这些是您与使用API的人共享的契约)。如果更改私有方法的参数类型,则不会有破坏性的更改。但是,如果您更改公共方法的参数类型,您将有一个突破性的更改!您的所有客户现在都需要更改其代码!