генерация заказов дилерам в разных форматах
От: Studentik87  
Дата: 05.12.08 14:51
Оценка:
доброе время суток уважаемым участникам форума!
В нашей компании есть маленькая программка, которая генерирует заказы нашим дилерам. большинство дилеров принимает заказы в нашей стандартной форме, но некоторые дилеры требует от нас, чтобы мы отправляли им заказы в их форме.
У нас есть абстрактный класс DealerOrderGenerator, от которого наследуются классы, обеспечивающие генерацию заказа дилеру в нужном формате, т.е. классы типа DefaultOrderGenerator, ComplexFormatOrderGenerator, SomeOtherCompanyNameOrderGenerator.
Нужно связать поставщика с определенным форматом заказа. Это можно сделать очень тупо:

DealerOrderGenerator CreateDealerOrderGenerator(Dealer dealer, Order order)
{
  switch(dealer.Name)
  {
    case "CompanyName":
      return new SomeOtherCompanyNameOrderGenerator(order);
    case "AnotherCompanyName":
      return new AnotherCompanyNameOrderGenerator(order);
    default:
      return new DefaultOrderGenerator(order);
  }
}

понятно, что это не самый лучший дизайн для фабричного метода.
Можно заменить имена дилеров, на их ID — уже лучше, но тоже не хорошо.

Поэтому видимо надо напрячься и сделать у класса Dealer и в таблице Dealers поле OrderFormatID, а так же сделать таблицу OrderFormats. В коде же сделать enum OrderFormats, и результирующий код будет к примеру таким:

enum OrderFormats
{
  Default = 1,
  CompanyA = 2,
  CompaniesBC = 3
}

DealerOrderGenerator CreateDealerOrderGenerator(Dealer dealer, Order order)
{
  switch((OrderFormats)dealer.OrderFormatID)
  {
    case OrderFormats.CompanyA:
      return new CompanyAOrderGenerator(order);
   // и т.д.
  }
}

но в этом случае все равно придется следить за тем чтобы значения в таблице OrderFormats и в enum'е OrderFormats не рассинхронизировались.
что уважаемые гуру думают о таком решении? или как-то можно сделать по другому, лучше и проще?
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.