1

製造工場で使用されるWindowsCEバーコードスキャンアプリケーションのリファクタリングに使用する適切なデザインパターン/モデルに関する入力を探しています。それをもう少しオブジェクト指向にし、手続きを少し少なくしようとしています

現在、アプリの機能の大部分は、基本的に1つの主要なメソッドの大きなcaseステートメントによって制御されており、プライベート整数の値によって、caseを通過するパスが決まります。

多くのスキャンが順番に実行されるため、コードは基本的に、ユーザーがメニューに戻って別のスキャン機能を選択するまで、すべてのバーコードスキャンの後にこのメインメソッドをループします。

多くのトランザクションタイプでは、コードはメインのcaseステートメントを順番に複数のパスをたどる必要があります。たとえば、「パッキング」トランザクションでは、ユーザーは最初にIDバッジをスキャンし、次にターゲットコンテナーをスキャンしてから、ターゲットコンテナーにパックするアイテムをスキャンする必要があります。これらはすべて、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
}

このSEEMSは、各スキャン機能が「スタック」または順番に実行されるトランザクションになる可能性があるため、コマンドパターンを使用する候補になる可能性がありますが、よくわかりません。コードは正常に機能しています。要件の変更や追加に伴ってコードがますます複雑になることが予想されるため、少しだけリファクタリングを試してみたいと思います。

4

1 に答える 1

1

これはオブジェクト指向以外の問題であるため、オブジェクト指向のデザインパターンを探すことは不適切です(少なくともリファクタリングのこの段階では)。有限状態マシンが必要なので、FSMを設計します。FSMの特定の部分がまだ面倒または複雑に見える場合は、それに適したOOデザインパターンを探してください。

于 2013-03-07T20:53:35.163 に答える