суббота, 6 декабря 2008 г.

Extract Superdirectory (Configuration Refactoring)

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

build
- Release
- Debug

Но как всегда возникает проблема, что нужно копировать одни и теже файлы в обе папки. Это досадно и неприятно. Получается дублирование файлов. А это зло, так скажет любой нормальный Agile-разработчик.

Для этого рекомендую применить рефакторинг:
Extract Superdirectory
You have two directory with similar files.
Create a superdirectory and move the common files to the directory.

В результате получаем несоколько папок:
build
- Common
- Release
- Debug

Другой вопрос, если в файлах папки Common нужно кастомизировать часть файла исходя из типа сборки. Ну тут чуть сложнее, используем Configuration Adapter паттерн. Который в зависимости от сборки вырезает и заменяет секции файла исходя из типа сборки. Реализация совсем проста - это исполняемый файл, который натравливается на, например, конфигурационный файл, он ищет секции заключённые в нужные теги (@Release@, например), а остальные стерает (@Debug@).

3 комментария:

  1. >Другой вопрос, если в файлах папки Common нужно кастомизировать часть файла исходя из типа сборки.
    Денис, это необходимо в некоей абстрактной сборке или в рамках какой-то конкретной технологии?

    ОтветитьУдалить
  2. Технологий не слышал таких. Обходимся своим "вырезателем" :)

    Правда там возникают проблемы, которые исходят из того, какого размера секция, которая должна быть оставлена или удалена. Если она слишком маленькая, то указав новоиспечённые метки может получится нарушение конфигурационного xml-файла. Начинают ругаться валидаторы и т.п. Поэтому приходится делать секции больше. А это приводит к дубляжу неких тэгов конфигурации.

    ОтветитьУдалить