Разделять частное и общее или нет
От: LevLimin Россия  
Дата: 18.04.18 10:06
Оценка:
Есть у меня одна библиотечка, которая работает, но требуется туда внести значительные изменения.
И пока ещё есть время для глупых вопросов.

Суть такова. Есть сервак, который хранит пространственные данные и когда пользователь обведёт рамкой объекты на карте и отправит войск... ,
необходимо экспортировать, попавшие в выделение слои и объекты, в другой формат — DXF или MID/MIF или ещё какой, который понадобится завтра.

Весь "алгоритм" состоит из нескольких частей:

1. Открываем источник. Он всегда один и тот же.
2. Настраиваем драйвер таргета. Тут могут быть нюансы, в зависимости от формата.
3. Создаём таргет. Тут тоже могут быть нюансы.
4. Начинаем в цикле выгребать из источника слои и в каждом слое объекты. Тут всё одинаково.
5. Что бы скопировать данные надо сделать копию слоёв в таргете.
Т.е. создать слой такой же как в источнике, и структура слоя должна быть такой же или не очень.
И тут уже идут нюансы.

В DXF понятия слоя нет, и атрибуты слоя создавать не надо, всё автоматом драйвером делается.
Типа деление на слои уже идёт в приложениях по полю layer. Что туда понапишем, на такие слои и разобьется.
А вот в MID/MIF уже можно делать всё по-человечески. 1 слой из источника = 1 слой в таргете. И атрибуты слоя надо руками создавать,
как минимум копируя структуру слоя источника.

6. Дальше идёт копирование объекта. Геометрия просто копируется, а атрибуты снова в зависимости от формата. DXF — заполняем поле layer
атрибутом layerName из источника. В MID/MIF придётся как минимум копировать все атрибуты из источника.

7. Ещё могут быть какие-то работы после экспорта. Как-то обрабатываться файлы результата. MID/MIF состоит из двух файлов, значит надо обернуть в zip.
Ну и в зависимости от кодировки может потребоваться обработка файла.

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

Мой первый вариант был с базовым классом, а в наследнике определяются функции CreateLayerDefn, CopyAttr и т.д. которые в конструкторе наследника,
инициализируют переменные базового класса. И базовый класс, когда надо просто вызывал их в нужный момент.

Но щас глянул на всё это непотребство и думаю, может не гемороиться и тупо весь код копировать в каждый класс для того или иного формата?
Lev Limin
Re: Разделять частное и общее или нет
От: swame  
Дата: 18.04.18 11:19
Оценка: 1 (1) +1
Здравствуйте, LevLimin, Вы писали:

LL>Есть у меня одна библиотечка, которая работает, но требуется туда внести значительные изменения.

LL>И пока ещё есть время для глупых вопросов.


Вроде как тут общим может быть только код создания коллекции, или обхода нужных элементов.
Метод записи в каждый формат должен быть свой.
Оборачивание в zip — общий метод, для тех форматов где это требуется — вызывать из метода конвертирования формата с подходящими параметрами.
Никакого копипаста при нормальном структурировании не остается. 1 Строчку обхода коллекции или энумерации копипастом не считаем.
Если еще какой то код будет повторяться — выносим в метод.
Re[2]: Разделять частное и общее или нет
От: LevLimin Россия  
Дата: 18.04.18 14:13
Оценка:
Здравствуйте, swame, Вы писали:

S>Здравствуйте, LevLimin, Вы писали:


LL>>Есть у меня одна библиотечка, которая работает, но требуется туда внести значительные изменения.

LL>>И пока ещё есть время для глупых вопросов.


S>Вроде как тут общим может быть только код создания коллекции, или обхода нужных элементов.

S>Метод записи в каждый формат должен быть свой.

Спасибо! Вы избавили меня от метаний. Пока есть время, буду переписывать.
Lev Limin
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.