【问题标题】:Design pattern for class with more than one methods具有多个方法的类的设计模式
【发布时间】:2017-12-23 05:04:50
【问题描述】:

我正在构建一个调用各种 API 的应用程序,作为 SOLID 原则以及一个类应该如何承担单一职责的新手,我希望在设计我的类时考虑到 SOLID,

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

}

如果我的班级有不止一种方法,它是否遵循 SOLID 并且,

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

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

【问题讨论】:

  • 它被称为单一责任而不是单一方法是有原因的。一个类可以有多个公共方法并且有一个单一的职责。
  • SOLID 只是常识。您不会“仅仅因为”在不同的类中提取方法。你这样做是因为他们在一起看起来很丑——他们所做的事情有很大的不同,很明显他们不应该在一起。或者一个单个方法太长了,做了很多事情,很明显它应该被拆分
  • 我投票结束这个问题,因为它属于codereview.stackexchange.com
  • 这不是关于什么是“单一责任”和什么不是“单一责任”的强硬路线,我发现最好的解释是一个班级应该只有一个改变的理由,但这也是工资。也可能想看看naming conventions 我发现它们和模式一样重要。
  • 想想谁来消费接口——如果getInfor1和getInfor2不会一起使用,考虑接口隔离原则

标签: c# oop methods solid-principles


【解决方案1】:

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

如果每种方法代表实现同一目标的不同方式并且可以独立使用,那么使用可以将它们分开。假设您从 Google 或 Amazon 获取天气预报,您可以这样做:

interface IWeatherProvider 
{ 
   //SomeReturnType Get();
}

class AmazonWeatherProvider : IWeatherProvider  
{ 
    // Implementation
}

class GoogleWeatherProvider : IWeatherProvider  
{ 
    // Implementation
}

在上面的示例中,每个类代表实现相同职责的不同方式。

但如果你有 2 种方法:GetWeeklyForecastGetDailyForecast。您可以将这两个放在同一个类(或接口)中。这通常不会违反 SRP,它们都承担着相同的责任(获取天气预报)

您还可以拆分为不同的类,以防方法完全不相关并且可能由于不同的原因而改变或被不同的客户使用。


请注意您对公共/私有方法的看法。您可以根据需要公开 尽可能多的 公共方法(这些是您与使用 API 的任何人共享的合同)。如果您更改私有方法的参数类型,则不会发生重大更改。但是如果你改变了一个公共方法的参数类型,你就有了一个重大的改变!您的所有客户现在都需要更改他们的代码!

【讨论】:

  • 拥有私有方法并只公开一个调用私有方法的公共方法是否是一个好的经验法则??
  • @RezaDel 我没有听说过这样的规则。您可以根据需要公开尽可能多的公共方法(这些是您与使用 API 的任何人共享的合同)。如果您更改私有方法的参数类型,则不会发生重大更改。但是如果你改变了一个公共方法的参数类型,你就有了一个重大的改变!您的所有客户现在都需要更改他们的代码!
猜你喜欢
  • 1970-01-01
  • 2021-08-29
  • 1970-01-01
  • 1970-01-01
  • 2018-03-23
  • 2023-01-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多