-1

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

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

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

4

1 回答 1

2

考虑这样的事情是件好事。它肯定会帮助您完成更复杂的项目。您当然可以创建一个 IWritable 接口或具有具体实现的抽象类。就像是:

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());

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

public class Car
{
    private readonly IWritable _writer;

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

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

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

于 2017-09-20T23:27:01.937 回答