编写POS系统的最佳实践

Gar*_*ary 14 .net printing point-of-sale

我在C#中整合了一个基本的销售点(POS)系统,需要打印到收据打印机并打开现金抽屉.我是否必须使用Microsoft Point of Service SDK?

我一直在使用随附的Windows驱动程序打印到我的三星打印机,它看起来效果很好.我认为虽然其他打印机可​​能没有Windows驱动程序,然后我会卡住?或者我可以简单地使用通用/文本驱动程序打印到任何支持它的打印机?

对于现金抽屉,我需要将代码直接发送到COM端口,这对我来说很好,如果它省去了帮助客户在那些系统上设置OPOS驱动程序的麻烦.

我在这里走错了路吗?

Pau*_*ler 6

这可能是你所寻找的一个稍微不同的答案(!)......

使用"外部接口"(例如打印机,现金抽取等)时,总是抽象事物.您可能想要实施策略 - 模式策略.

您为现金抽奖制作了一个界面:

public interface ICashDrawer
{
    void Open();
}
Run Code Online (Sandbox Code Playgroud)

提供实现:

  • 一个策略是使用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);
    }
}
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 :-)


ken*_*nny 0

快速浏览一下,MS 销售点系统基于 Window Embedded,这实际上只是获得更低单位成本和更小 Windows 操作系统许可证的一种方式。似乎有一些特定于 POS 的 API,但您似乎想要推出自己的 API,您可能仍然想以某种方式使用 Windows Embedded。安全可能是第一要务。