我想写一个打印文档的应用程序。
哪种设计更好?变体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),也不会违反开闭原则。