Рекомендации по шаблону проектирования - чтение данных из TXT - PullRequest
0 голосов
/ 09 ноября 2019

ПРОБЛЕМА

У меня есть приложение, которое требует загрузки большей части своих данных из .txt файлов (которые ранее были предоставлены и существуют в локальном хранилище - они нене нужно быть извлеченным). Допустим, в настоящее время у меня есть 3 модели: Person, Role, Task с соответствующими данными Persons.txt , Roles.txt , Tasks.txt соответственно. Каждый файл имеет заголовок, который описывает структуру каждой записи (, например, id; имя; фамилия ), и каждая строка в файле .txt представляет одну запись (исключая заголовок). При этом записи могут быть в неправильном формате (отличном от заголовка), и они должны быть пропущены.

GOAL

Я хочу каким-то образом создать универсальный загрузчик данных, который будет загружать данные (читать строку .txt построчно, проверять ввод, обрезать и преобразовывать в экземпляр объекта). ) и вернуть список объектов в зависимости от класса, который я им передаю. Например, DataLoader<Person> для загрузки только личных данных. Текущее решение использует шаблон Singleton для каждого названного класса, а также содержит логику для анализа, проверки и преобразования данных. Причина этого в основном в том, что данные должны быть доступны из всех других частей приложения, но каждый класс содержит слишком много логики, и большинство других классов полагаются только на эти синглтоны - что, на мой взгляд, не очень хорошо.

ВОПРОС

Каков наилучший (самый чистый) шаблон проектирования для реализации в этом случае использования? Несколько вещей, на которые стоит обратить внимание перед ответом:

  1. Формат файла никогда не изменится (он всегда будет .txt)
  2. В будущем может быть больше данных для загрузки (например, Departmentи Departments.txt и т. д.)

1 Ответ

0 голосов
/ 11 ноября 2019

Взгляните на шаблон стратегии :

Стратегия позволяет алгоритму варьироваться независимо от клиентов, которые его используют. [...] Откладывание решения о том, какой алгоритм использовать до времени выполнения, позволяет вызывающему коду быть более гибким и многократно используемым.

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

...