要件は、保留中のレコードの db テーブルをポーリングするために使用される現在の Windows サービス アプリ (C# を使用した .net 2.0 からデザイン パターンを使用した .net 4.5) を書き直すことです。保留中のレコードがある場合は、タイプに基づいて処理します。 . 約 30 の異なるジョブ リクエストが可能であり、これらのジョブ リクエストに対応するために約 10 のクラスを作成しました。一部のクラスは複数のジョブ タイプに対応します。
AddCreditCard、DeleteCreditCard、UpdateCreditCard と同様に、1 つのクラスに含めることができますが、3 つの異なるジョブ タイプにすることができます
現在、コードは switch case を使用して、ジョブを提供する適切なオブジェクトを作成しています。しかし、問題は非常に静的であり、所有権はWindowsサービスにあります。抽象クラスのようなリクエストを受け取り、タイプに基づいてオブジェクトを作成し、リクエストを特定のクラスに渡すパターンが必要だと思います(ここと同じですが、素敵なパターンで)
switch (currentRecord.ProcessingType)
{
case AddCreditCard:
{
CreditCardProcess ccd = new CreditCardProcess();
retVal = ccd.AddCreditCard(currentRecord);
if (retVal)
{
currentRecord.Status = 'C';
currentRecord.ErrDesc = '';
}
else
{
currentRecord.Status = 'E';
currentRecord.ErrDesc = 'failed to process';
}
break;
}
#endregion
case UpdateCreditCard:
{
CreditCardProcess ccd = new CreditCardProcess();
retVal = ccd.UpdateCreditCard(currentRecord);
if (retVal)
{
currentRecord.Status = 'C';
currentRecord.ErrDesc = '';
}
else
{
currentRecord.Status = 'E';
currentRecord.ErrDesc = 'failed to process';
}
break;
}
case DeleteCreditCard:
{
CreditCardProcess ccd = new CreditCardProcess();
retVal = ccd.DeleteCreditCard(currentRecord);
if (retVal)
{
currentRecord.Status = 'C';
currentRecord.ErrDesc = '';
}
else
{
currentRecord.Status = 'E';
currentRecord.ErrDesc = 'failed to process';
}
break;
}
case AddACH:
case DeleteACh:
case ModifyACH:
case Authorize:
case SalesTran:
#endregion
C#で.NET 4.5を使用しています