这可能与您正在寻找的答案略有不同(!)......
当使用“外部接口”(例如打印机、现金提取等)时,总是抽象的东西。您可能想要实施策略——模式策略。
您为现金提取制作了一个界面:
public interface ICashDrawer
{
void Open();
}
提供的实现:
- 一种策略是使用 COM 打开抽奖的类
- 另一个是简单的
Debug.WriteLine
调用类,因此您在开发过程中不需要将现金提取连接到您的 PC
例如
public class ComPortCashDrawer : ICashDrawer
{
public void Open()
{
// open via COM port etc
}
}
public class DebugWriterCashDrawer : ICashDrawer
{
public void Open()
{
Debug.WriteLine("DebugWriterCashDrawer.Open() @ " + DateTime.Now);
}
}
同样对于打印,您有一个打印接口来获取数据:
public interface IRecieptPrinter
{
bool Print(object someData);
}
然后你做一个或多个实现。
- 基本打印机
- 专业标签打印机
- 一种基于文本的保存到文件的...
例如
public class BasicRecieptPrinter : IRecieptPrinter
{
public bool Print(object someData)
{
// format for a basic A4 print
return true; // e.g. success etc
}
}
public class SpecificXyzRecieptPrinter : IRecieptPrinter
{
public bool Print(object someData)
{
// format for a specific printer
return true; // e.g. success etc
}
}
public class PlainTextFileRecieptPrinter : IRecieptPrinter
{
public bool Print(object someData)
{
// Render the data as plain old text or something and save
// to a file for development or testing.
return true; // e.g. success etc
}
}
关于 SDK,如果您发现出于某种原因需要它,您可以使用 SDK 编写实现。随着时间的推移,您最终可能会通过多种方式与不同的外部设备进行交互。客户可能有一天会获得新的现金提款等。
这清楚吗,如果你愿意,我可以充实我的意思,但你可能明白我的意思。
您的应用程序在启动时设置了各自的实现,您可能还想看看依赖注入,如果您使用容器来解析类型,您会发现事情更容易。
var printer = container.Resolve<IRecieptPrinter>();
PK :-)