【问题标题】:Is it ok to print to console from inside methods or should printing output methods be aggregated in separate class?可以从内部方法打印到控制台还是应该将打印输出方法聚合到单独的类中?
【发布时间】:2019-05-19 15:40:41
【问题描述】:

我正在编写一些控制台应用程序,例如我有不同的类,我希望能够在我的应用程序中调用这些类来打印输出。

// For example I have Vehicle class and method Park in it
public void Park()
{
        if (Parking.ParkedVehicles.Count < ParkingSettings.ParkingCapacity)
        {
            Parking.ParkedVehicles.Add(this);
            _isParked = true;
            Console.WriteLine("Your vehicle(" + Color + " " + Make + "," +
                              LicenseNumber + ") was parked successfully. Go be pedestrian somewhere else");
        }
        else
        {
            Console.WriteLine("Sorry. Unfortunately all parking slots are occupied, try again next time");
        }
}

还有 Parking 类,其中包含 PrintOccupanctStatus() 方法

    public static void PrintOccupancyStatus()
    {
        if (ParkedVehicles.Count < ParkingSettings.ParkingCapacity)
        {
            Console.WriteLine($"Currently there are {ParkingSettings.ParkingCapacity - ParkedVehicles.Count} spots left");
        }
        else
        {
            Console.WriteLine("Sorry, parking has no free spots left");
        }
    }

所以这是两个不同的独立类,我在我的控制台应用程序中调用它们。它被认为是一种“OKAY”的方法还是我应该做类似ConsoleHelper 的事情来打印结果并让上述方法返回字符串?

【问题讨论】:

  • 没关系....但是看着那个函数,它返回 void 并在内部成员上运行并写入控制台以通过侧通道返回数据让我很伤心。如果您改为将其结构化为返回一个 Tuple 那么单独进行单元测试会容易得多。如果您还传入了 ParkedVehicles.Count 和 ParkingSettings.ParkingCapacity,那么单元测试将非常容易,并且您可以将其设为静态
  • 谢谢,布赖恩。我会考虑你的建议,不胜感激

标签: c#


【解决方案1】:

我认为这个实现没有问题。因为 Console.WriteLine 是一个静态方法,如果你想在另一个类中创建另一个方法,调用那个方法和这个没有区别

【讨论】:

    【解决方案2】:

    是的,可以从不同的类调用此方法。 Console 基本上是您所指的 ConsoleHelper 类。甚至是thread safe,所以你可以从多个线程调用它。

    【讨论】:

      【解决方案3】:

      没关系,但是我个人建议使用像https://github.com/nlog/NLog/ 这样的日志库。例如,您可以写入控制台并另外写入日志文件并在文本编辑器中查看整个输出。您可以让这个库编写哪个类和方法为您提供输出,这可以帮助您调试应用程序。您还可以配置不同的级别,例如信息、警告、错误或跟踪。

      【讨论】:

      • 谢谢你,托尼。但是,我的应用程序有一些条件,不需要使用外部库(这是某种分配)
      猜你喜欢
      • 1970-01-01
      • 2016-04-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-13
      • 2017-12-18
      相关资源
      最近更新 更多