Вопрос философский.
Довольно часто бывает, что IDE помогает генерировать часть кода.
Примеры:
Dreamweaver
использует шаблоны страниц. При этом часть страницы в шаблоне можно определить как вводимую пользователем в экземпляре реализации шаблона. Пользователь просто не может редактировать собственно шаблон, находясь в странице. После изменения шаблона нажимаем кнопку «перегенерировать» и программа заменяет шаблон во всех местах его использования, а код, введённый пользователем, остаётся на месте.
Здесь у человека и у компьютера есть области ответственности, разделённые пространственно.
Автоматический рефакторинг
В IDE для Java есть автоматический рефакторинг. Мы написали код, который компилируется. Далее нажали на кнопку и - хопс - метод разбился на два. Здесь разделение ответственности идёт по времени - сначала работает человек, потом компьютер. По файлам ответственность не распределена.
Delphi (и другие IDE)
Когда кладём кнопку на форму, в класс формы добавляется поле. Когда щёлкаем на событие, в текст добавляется заготовка обработчика события.
Потом удаляем кнопку, а обработчик события остаётся. Либо у нас в неожиданные моменты могут возникать сообщения о том, что мы загенерились куда-то не туда, причём они появляются в модальном окне и нельзя посмотреть контекст произошедшего. Это уже плохо.
Я думаю использовать для ведения данных о зависимости модулей разделение области ответственности по файлам. Из исходного текста реализации модуля зачастую можно вывести часть информации о зависимостях этого модуля. Например тот же дельфи предлагает подключить к uses модуль имярек, если находит в коде обращение имярек.функция. Значит, эту работу можно (и нужно) автоматизировать, чтобы не человек декларировал все зависимости, а часть работы делала среда (это подразумевает проектирование «снизу-вверх»).
Затея состояла в том, чтобы было два определения:
написанное нами изначально (уж имя модуля мы всегда должны задать)
- действительно получившееся в результате наших действий с учётом информации, выведенной компьютером на этапе сборки.
- И чтобы они находились в разных файлах.
Одним из этапов сборки будет приведение действительного определения в соответствие с реальностью.
Здесь в явном виде видны информационные потоки, т.е. что от чего зависит. Явно можно видеть причину проблемы. Ясно, за что отвечает человек, а за что - компьютер.
Один раз я так делал, хотя цель была другой. Я завёл макрос defun-to-file, который генерирует файл с телом функции, а потом выполняет. Это удобно в случае, когда функция генерируется макросом и у неё нет собственного исходника. Имея хотя бы сгенерированный файл с исходником, мы получаем возможность показать место выполнения в стеке, да и посмотреть, что за код сгенерировался, хранить его в системе контроля версий, искать по нему и т.п.. Ещё хорошо при этом писать в докстринге «сгенерировано из макроса такого-то». Вроде это иногда оказывалось полезным.
Но почему-то я не видел, чтобы так делалось. И в случае определения модуля у меня есть сомнения - определение модуля получится размазанным по двум файлам, что не слишком удобно.
Соответственно, ищу подтверждения или развенчания данной конструкторской идеи.