Gar*_*ary 14 .net printing point-of-sale
我在C#中整合了一个基本的销售点(POS)系统,需要打印到收据打印机并打开现金抽屉.我是否必须使用Microsoft Point of Service SDK?
我一直在使用随附的Windows驱动程序打印到我的三星打印机,它看起来效果很好.我认为虽然其他打印机可能没有Windows驱动程序,然后我会卡住?或者我可以简单地使用通用/文本驱动程序打印到任何支持它的打印机?
对于现金抽屉,我需要将代码直接发送到COM端口,这对我来说很好,如果它省去了帮助客户在那些系统上设置OPOS驱动程序的麻烦.
我在这里走错了路吗?
这可能是你所寻找的一个稍微不同的答案(!)......
使用"外部接口"(例如打印机,现金抽取等)时,总是抽象事物.您可能想要实施策略 - 模式策略.
您为现金抽奖制作了一个界面:
public interface ICashDrawer
{
void Open();
}
Run Code Online (Sandbox Code Playgroud)
提供实现:
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);
}
}
Run Code Online (Sandbox Code Playgroud)
再次打印你有一个打印接口,可以获取数据:
public interface IRecieptPrinter
{
bool Print(object someData);
}
Run Code Online (Sandbox Code Playgroud)
然后你做一个或多个实现.
例如
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
}
}
Run Code Online (Sandbox Code Playgroud)
对于SDK,如果你发现需要它,你会因为某种原因使用SDK编写实现.随着时间的推移,您可能会采用多种方式与不同的外部设备进行交互.客户可能会在一天内获得新的现金抽取等.
这是清楚的,我可以充实我的意思,如果你想,但你可能会让我的漂移.
您的应用程序在启动时使用相应的实现进行自我设置,您可能还需要查看依赖注入,如果使用容器来解析类型,您会发现更容易.
var printer = container.Resolve<IRecieptPrinter>();
Run Code Online (Sandbox Code Playgroud)
PK :-)
快速浏览一下,MS 销售点系统基于 Window Embedded,这实际上只是获得更低单位成本和更小 Windows 操作系统许可证的一种方式。似乎有一些特定于 POS 的 API,但您似乎想要推出自己的 API,您可能仍然想以某种方式使用 Windows Embedded。安全可能是第一要务。