1

我正在寻找一些关于用于重构制造工厂中使用的 Windows CE 条形码扫描应用程序的良好设计模式/模型的输入。试图让它更面向对象,更少程序化

目前,应用程序的大部分功能基本上由一种主要方法中的大型案例语句控制,私有整数的值决定了通过案例的路径。

因为许多扫描是按顺序执行的,所以代码在每次条码扫描后基本上循环通过这个主要方法,直到用户退出菜单并选择不同的扫描功能。

对于很多事务类型,代码需要依次通过主case语句走多条路径。例如,“打包”交易需要用户先扫描自己的id badge,然后扫描目标容器,再扫描目标容器中要打包的物品,这些都是main方法中的单独案例。

在这种情况下,一个非常简化的示例:

private int activeTrans;
private int baseTrans;
private int nextTrans;

btnPack_Click()
{
   nextTransaction = 2
   StartTransaction(1, 1)              
}

StartTransaction(int transId, int transMode)
{
  //determines the initial path(s) to take 

  switch (transMode)
  {
    case 1:  //scan parent 
      activeTrans = 4;
      baseTrans = transId;
      break;

    //a handful of other case statements representing the major types of transactions
    ...
  }

  StartBarcodeRead() //the scanner prepared to scan, once the user scans a barcode, 
                     //the HandleData method is called
}

HandleData()
{
  switch (activeTrans)
  {
    case 1:  //select target container
      DoSomeMethodForTheTargetContainer();
      activeTrans = baseTrans;

    case 2:  //pack in container
      DoThePackingMethod();

    case 3:  //scan id badge
       ValidateIdBadgeScan();
       activeTrans = baseTrans;
       baseTrans = nextTrans;

    ... //about 20 more cases for all the different transactions
}

这似乎是使用命令模式的可能候选者,因为每个扫描功能都有可能成为“堆栈”或按顺序运行的事务,但我不确定。代码运行良好——我只想尝试重构一下,因为我可以预见随着需求的变化或添加,代码会变得越来越复杂。

4

1 回答 1

1

这是一个非 OO 问题,因此寻找 OO 设计模式是不合适的(至少在重构的这个阶段)。你需要一个有限状态机,所以设计一个 FSM。如果您的 FSM 的特定部分仍然看起来过于繁琐或复杂,请为其寻找合适的 OO 设计模式。

于 2013-03-07T20:53:35.163 回答