c# - 我的文档类应该有打印方法还是应该有一个专用的打印机类?

标签 c# oop architecture

<分区>

我想编写一个打印文档的应用程序。

哪种设计会更好?变体 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 类,它只进行打印。或者向 Document 类本身添加一个 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 更好,因为它遵循 SOLID,并且更易于维护、扩展……您的应用。

此外,我认为你应该基于一个接口(interface)(也许是IDocumentPrinter)来实现DocumentPrinter。

interface IDocumentPrinter
{
    void PrintDocument(Document document);
}

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

让我们想一想:如果将来你需要有很多打印机,那么使用解决方案A(包括IDocumentPrinter)你只需要实现基于IDocumentPrinter的新类(DocumentPrinterA,DocumentPrinterB,......)而你不需要更改您当前的类(Document、DocumentPrinter),它不会违反开闭原则。

关于c# - 我的文档类应该有打印方法还是应该有一个专用的打印机类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52188780/

相关文章:

c# - 当涉及异步函数时,如何仅在需要时初始化一些数据

c++ - 防止更改继承的 protected 成员的访问级别

java - 如何存储具有不同行为的相似对象?

architecture - 计算机犯错的频率有多高?

language-agnostic - 在编写任何代码之前如何规划应用程序的架构?

database - 每个微服务单个数据库真的意味着每个微服务单个数据库服务器吗?

c# - 如何使用c#/VB.NET在word中插入书签

c# - 如何为 DataGridViewComboBox 列设置值?

c# - 在响应中出现错误

C++继承误解