c# - 如何设计两个相似(但不完全)的类?

标签 c# .net architecture solid-principles

情况是这样的。 我们有两台来自不同供应商(制造商)的打印机。 我们希望顶级代码不了解有关提供程序的详细信息,而只使用统一的 API。 所以我已经开始提取接口(interface)了。

public interface IPrinterProvider {
    bool Connect(string comPort);
    bool IsConnected();
}

好的。 现在,我意识到一台打印机需要 Password 属性,而另一台则不需要。 那么,我该怎么办?

再一次。 据我所知,我将有一个或几个接口(interface)和几个实现者。 但是调用者将如何工作? 我应该创建一个单独的类,它可能不实现任何接口(interface)吗?例如:

public class CommonPrinterProvider {
    private IPrinterProvider printerProvider;
    public CommonPrinterProvider(IPrinterProvider printerProvider) {
        this.printerProvider= printerProvider;
    }
}

所以,总共有两个问题。

最佳答案

我会将打印机“设置”(或者更准确地说,“连接设置”)封装到另一个类中,并将其放在接口(interface) 中。有点像这样:

public class PrinterSettings {
    public string Password { get; set; }
    public int Port { get; set; }
    /* .. others .. */
}

public interface IPrinterProvider {
    void Initialize(PrinterSettings settings);
    bool Connect(string comPort);
    bool IsConnected();
}

然后每个实现都可以以他们认为合适的任何方式处理设置。

关于c# - 如何设计两个相似(但不完全)的类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17989736/

相关文章:

c# - 将职责委派给 WinForm 控件——控件是否应该了解彼此的操作?

c# - 在按下 Enter 键时绑定(bind) TextBox

architecture - CQRS:查询端的业务逻辑

java - ExtJS 的 JSP 后端

asp.net - C# (ASP.net) 中 RSS 提要的最佳实现

c# - 相同类型对象的 InvalidCastException - 自定义控件加载

c# - 如何使用 NSubstitue 框架从 Controller 类模拟基方法

c# - 字典c#的算术运算

c# - .NET 反射 : Find used types

.net - 我可以重复使用交易吗?如何?