我想写一个打印文档的应用程序。
哪种设计更好?变体A:

class Document
{
    public string Title { get; set; }
    public string Author { get; set; }
    public string Content { get; set; }
    // ...
}

class DocumentPrinter
{
    public void PrintDocument(Document document)
    {
       // ...
    }
}

这将提供一个专门的documentprinter类,该类只进行打印。或者最好在文档类本身中添加print()-方法,比如这里(变量b):
public class Document
{
    public string Title { get; set; }
    public string Author { get; set; }
    public string Content { get; set; }

    public void Print()
    {
       // ...
    }
}

这两个变量的隐含折衷是什么?哪一个在可维护性和体系结构方面更好?
我认为变体A更好,因为它可以满足
单一责任原则”。但变型B的使用更直观。

最佳答案

依我看,方案A比较好,因为它遵循的是坚实的,而且更容易维护、扩展…你的应用程序。
此外,我认为您应该基于接口(可能是i documentprinter)实现documentprinter。

interface IDocumentPrinter
{
    void PrintDocument(Document document);
}

class DocumentPrinter: IDocumentPrinter
{
    public void PrintDocument(Document document)
    {
       // ...
    }
}

让我们想想:如果将来需要很多打印机,那么使用解决方案A(包括idocumentprinter),您只需要实现基于idocumentprinter(documentprinter a,documentprinterb,…)的新类,而不需要更改当前类(document,documentprinter),也不会违反开闭原则。

10-05 19:02