Что такое хороший шаблон проектирования для создания файлов? - PullRequest
5 голосов
/ 07 февраля 2012

В одном приложении у меня есть задача создать файлы, которые будут использоваться третьей стороной. На самом деле в файлах есть три разных типа контента:

  1. Список карточек сотрудников для отправки данных в стороннее приложение;
  2. Список карточек сотрудников для сбора биометрии;
  3. Интервал чисел.

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

Существует хороший шаблон проектирования, позволяющий обеспечить соблюдение соглашения об именах файлов и разделить генерацию файлов по отдельным классам для каждого типа файлов?

Есть хороший способ повторно использовать код, который генерирует файл (не повторяя себя в определенных классах)?

Это часть существующего класса:

class FileGenerator {
    private List<String> contentOfFile;
    private String fileName;

    //I - include employees
    //C - change employees
    //R - remove employees
    //B - collect biometry
    //N - interval of numbers
    private String option;

    private void getFileName(){ ... } //this assure the file name convention
    public void generate(){ ... } //this generate the file with content

}

Что я думаю пока:

  1. Создайте один abstract class для хранения соглашения об именах. И записать содержимое в файл.
  2. Создайте factory class, который будет знать все типы файлов (фабрика - хороший образец для использования здесь?).
  3. Реализация конкретных классов для типов файлов, чтобы определить, какой контент будет записан.

1 Ответ

0 голосов
/ 07 февраля 2012

Более или менее то, что вы сказали:

1 - Шаблонный шаблон для записи файла.Я думаю что-то вроде этого:

public abstract class EmployeeCardFileGenerator {
   /**
   * @return the generated file name
   */
   public abstract String getFileName(/*any params you need to get the file name*/);

   /**
   * @return the line corresponding to the given data record
   */
   public abstract String getLine(EmployeeCardData data);

   /**
   * @return the header to be appended at the beginning of the file
   */      
   public abstract String getHeader(/*any header params*/);

   /**
   * @return the footer to be appended at the end of the file
   */
   public abstract String getFooter(/*any footer params*/);

   public void generateFile(/*any params*/) {
      List<EmployeeCardData> data = queryData();

      File f = createFile();
      PrintWriter pw = getWriter(f);
      pw.println(getHeader());

      for(EmployeeCardData ec : data) {
          pw.println(getLine(ec));
      }

      pw.println(getFooter());

      cleanup();
   }
}

2 - у вас могут быть разные их реализации, предоставляемые фабрикой.

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