Console.Writeline 在 class 方法中。更好的设计

Console.Writeline in class method. Better Design

我正在编写一个简单的控制台应用程序,我希望能够打印到屏幕上。

public class Car{
    public void Drive(){
        //Here I want to print that the car is driving
    }
}

我可以只在我的 Drive() 函数中使用 Console.Writline(),但我认为这不是一个好的设计,因为将来我可能想将其记录到文件中。实现这种多输出日志记录功能的最佳设计是什么? 是否有一个用于控制台和文件输出(Iwritable)的通用接口,我或许可以将其传递给 Driver() 以便我可以处理这两种类型的输出。还是有更好的设计来实现这一点?

能想到这样的事情真好。它肯定会帮助您完成更复杂的项目。您当然可以创建一个 IWritable 接口或具有具体实现的抽象 class。类似于:

public interface IWritable
{
    void Write(string text);
}

public class ConsoleWriter : IWritable
{
    public void Write(string text)
    {
        Console.WriteLine(text);
    }
}

然后您的 Drive() 方法可以接受 IWritable 参数。

public class Car
{
    public void Drive(IWritable writable)
    {
        writable.Write("I'm driving!");
    }
}

new Car().Drive(new ConsoleWriter());

当然,如果您的 class 有几个方法需要做类似的事情,您可以考虑更改构造函数以接受一个 IWritable 参数并将其存储在一个字段中:

public class Car
{
    private readonly IWritable _writer;

    public Car(IWritable writer)
    {
        _writer = writer;
    }

    public void Drive()
    {
        _writer.Write("I'm driving!");
    }
}

以这种方式做事的另一个好处是它使您的 class 单元测试变得更加简单。您可以向它传递一些不会弄乱您的日志文件或更新您的数据库的无害编写器,但仍然让您测试 class.