Должен ли я использовать фабрику здесь - PullRequest
1 голос
/ 03 мая 2011

У меня есть простой класс ExcelStringBuilder.Используется для построения строки, которую можно экспортировать в Excel.Теперь мне нужно также построить строку CSV.

Единственное отличие, которое я вижу для реализации обоих этих классов, - это разделитель, который должен использоваться при построении строки.Для Excel это будет символ табуляции \ t и CSV через запятую.

Что я думаю, так это передать разделитель в качестве параметра конструктору класса ExcelStringBuilder.Это будет правильное решение или я должен пойти по заводскому образцу?

Ответы [ 3 ]

3 голосов
/ 03 мая 2011

Не переусердствуйте. Я бы просто немного поменял существующий класс:

  • переименуйте его в что-то вроде ExportStringBuilder
  • передать разделитель в конструкторе или в качестве аргумента функции ToString()

Вы знаете, что для этого есть несколько отличных бесплатных библиотек? Например. см этот вопрос

1 голос
/ 03 мая 2011

Если вы планируете использовать фабрику, вы можете использовать шаблон шаблона вместе с фабрикой или самостоятельно. Поскольку большая часть алгоритма останется такой же, за исключением одного шага, и в будущем у вас могут появиться дополнительные шаги (например, новые разделители)

Вот один из подходов, использующий шаблон. Вы можете использовать «Getter» вместо GetDelimiter ().

class abstract StringBuilder
{
  public virtual string GetDelimiter();
  public string BuildString(string inputString)
  {
     // Your Code goes here...
     GetDelimiter(); // Code to introduce the delimiter
     // Some more of your code
  }
}

class ExcelStringBuilder : StringBuilder
{
 public override string GetDelimiter()
 {
   return "\t";
 }
}

class CsvStringBuilder : StringBuilder
{
 public override string GetDelimiter()
 {
   return ",";
 }
}
1 голос
/ 03 мая 2011

Если разность only является разделителем, я просто передал бы этот разделитель. Все остальное излишне.

Если есть больше различий, я бы создал StringBuilderFactory, чтовозвращает IStringBuilder.ExcelStringBuilder и CsvStringBuilder оба реализуют этот интерфейс.Вы передадите фабрике параметр, который сообщит фабрике, хотите ли вы использовать построитель строк Excel или CSV, и он вернет правильный.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...