2

要求是重写当前的 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

4

2 回答 2

1

使用反射将 TypeName 与 ClassName 匹配,并具有通用执行功能。例如

Interface Actions {
    public execute();
}

class AddCreditCard:Actions
  {
    execute()
      {
          // do DAO for add (etc)
      }
  }

Type typeObj asembly.GetType(currentRecord.ProcessingType);
object actionInstance = Activator.CreateInstance(typeObj);
actionInstance.Execute() ;

和类似的东西..

于 2013-05-16T06:17:34.733 回答
0

给 ccd 添加一个方法
你还有这种情况,但是封装在 ccd 中

public Int RetVal Process (Record currentRecord)
{

}
于 2013-05-15T21:01:08.037 回答