1

Тема: Генератор коду

Всім привіт. Пишу генератор коду (точніше генератор сайтів)
Я розумію що неможливо поцокавши або затративши 5хв на якусь фішку створити повноцінний сайт.
Задачі на сайтах бувають або дуже складні або настільки прості що генератор коду просто не потрібен.

На даному етапі я добився певного успіху але застряг на одній проблемі.
Зараз є така штука:
пишеш конфігурацію - генеруються файли (оновляється база даних)

На виході маємо більш менш робочу адмін панель і підготовлені контроллери для роботи.

Перевага звісно у тому що не треба робити багато маніпуляцій які дуже часто є нудними і повторяються.

А тепер про проблему:
Після створення коду я роблю правки у ньому, і пізніше якщо треба додати функціонал який підтримується моїм генератором доводиться вирішувати проблему, як зберігати поточний код що я добавив і новий функціонал. Не довго думавши вирішив зливати зміни вручну.  Якщо 1-2 файли це займає 1-2 хвилини.

Але все ж таки можливо є якийсь спосіб додавати новий код не порушуючи старий. Скажемо так безпечний спосіб злиття.

Скоріш за все мені потрібно програмно знати який код я додав(змінив) зберегти ці зміни і в майбутньому накласти.
Звичайний діф не підходить так як я можу додати функцію/константу і тд)

Наперед дякую ;)

2

Re: Генератор коду

Я б робив правки не в згенерованому коді а в генераторі коду. Ну чи в конфігах з яких той генератор код генерує.

Було б дивно якби наприклад CoffeScript якось помічав зміни JavaScript. Окрім звісно часу останнього.

3

Re: Генератор коду

Це звісно варіант але це дуже не зручно писати код в конфігураційному файлі або наприклад ще десь неясно чому)

4

Re: Генератор коду

Щось ваша система чим далі, чим більше стає схожою на yii

Думаю наслідування вирішить вашу задачу. Тобто є клас A згенерований вашим генератором і клас B який наслідується від A і саме туди ви робите свої правки. І якщо треба перегенерувати то ви просто перегенеровуєте клас A. Таким чином зберігається ваш функціонал і з'являться новий згенерований

5

Re: Генератор коду

Думаю наслідування вирішить вашу задачу. Тобто є клас A згенерований вашим генератором і клас B який наслідується від A і саме туди ви робите свої правки. І якщо треба перегенерувати то ви просто перегенеровуєте клас A. Таким чином зберігається ваш функціонал і з'являться новий згенерований

Дуже хороше рішення =)
Тільки один нюанс. Згенерив 10 класів моделей,  + 10 класів у які я можу вносити правки))
Існує імовірність що я внесу правки тільки у 1-2 класи))
Але варто задуматись над цією штукою :)

Щось ваша система чим далі, чим більше стає схожою на yii

На уіі не схожа так як це зовсім різні речі. УкрЦМС  це УкрЦмс а от система яка генерить код це інша фішка.  Так є адаптер за допомогою якого я створюю контроллери і моделі для укрцмс ) Але це адаптер ;)

6

Re: Генератор коду

Тільки один нюанс. Згенерив 10 класів моделей,  + 10 класів у які я можу вносити правки))
Існує імовірність що я внесу правки тільки у 1-2 класи))

Ну це я дав ідея від якої можна відштовхнутися.

Щоб обійти дану проблему можна допрацювати сам генератор. Як я це собі уявляю
Треба клас myClass.
Створюємо його генератор
Використовуємо згенерований клас.

Інший приклад... Треба myClass2
Створюємо його генератор
Хм, треба його допиляти
Копіюємо весь код новий клас із профіксом (prevMyClass2)
Очищуємо myClass2, наслідуємо від prevMyClass2  і перевизначаємо методи які нам потрібні.
О ні, ми за декілька місяців додали достобіса функціоналу у генеротор і треба перегенерувати класи
Перегенеровуємо:) Генератор має перевірити чи існує клас prev[className] якщо так то перегенеровується prev[className], якщо ні то клас [className]

Таким чином, у нас буде стільки класів, скільки нам і потрібно. Надіюсь такий підхід вирішить вашу задачу

Подякували: funivan1

7

Re: Генератор коду

Не зовсім зрозуміла задача, але... funivan, ви ж напевно користуєтесь SVN чи GIT так же? З чим вони не можуть справитись? Адже кожен із них може легко показувати будь-які зміни внесені вами на протязі всієї історії розробки. І раптом, якщо вам потрібно зразу декілька варіантів вашого коду, то для цього передбачені гілки, які можна зливати в довільному порядку.
Чи я сильно спрощено уявив вашу проблему?