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