Как лучше реализовать автообновление программного продукта(tricky;)?

TheGP

Новичок
Как лучше реализовать автообновление программного продукта(tricky;)?

Есть продукт который будет дорабатываться сторонними разработчиками под свои нужды(в этом вся соль). Нужно сделать чтобы стандартные модули и библиотеки иногда обновлялись.
Соответственно при обновлении не должны затираться изменения, сделанные другими программистами.

В abo.cms это сделано как я понимаю так: в каждом модуле есть 2 файла типа class.News.php и class.NewsPrototype.php
первый пустой изначально, во втором все стандартные функции. Первый наследует методы второго. Соответственно система обновляет 2ой, а разработчик делает все изменения в первом.

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

Как делаете вы? Если с этим не сталкивались то как бы реализовали подобное если бы понадобилось?:)
 

dimagolov

Новичок
сделать API, чтобы сторонние разработчики не меняли твой код
 

TheGP

Новичок
Автор оригинала: 440hz
SVN ?
и как это поможет? я всегда думал что подобные штуки нужно только для разработки проекта в команде... может я чего то не знаю?) если что - продукт не ввиде SAAS
 

pilot911

Новичок
События не везде помогут, наверное.. в Битриксе события позволяют изменять лишь массивы на запись и вывод и, в принципе, все.. SQL запрос не изменишь.. в этом плане abo.cms сделано получше

с другой стороны, события хороши, когда нужен документооборот и автоматический запуск бизнес-процессов по событиям/действиям..

я бы делал, как в варианте abo.cms, чтобы иметь полный контроль над вводом/выводом/формированием данных
 

tz-lom

Продвинутый новичок
Можно делать так
допустим есть класс /A
когда мы его хотим поменять пихаем его в другой namespace /proto/A
а нужные извращения делаем с /A унаследованным от /proto/A

для совсем ленивых случаев можно сделать ленивую подгрузку классов или же воспользоваться class_alias
 

A1x

Новичок
Есть продукт который будет дорабатываться сторонними разработчиками под свои нужды(в этом вся соль).
Сделать так чтобы можно было добавлять новую функциональность не трогая код ядра системы

Смотрите например фреймворки Magento или Kohana 3 (это из тех что я знаю)

События - один из возможных способов
Второй - использование паттерна фабрика пример из Magento
PHP:
$product = Mage::getModel('catalog/product');
по умолчанию получаем объект Mage_Catalog_Model_Product - через конфиг можем подставить свой расширенный класс

Третий - класс размещенный в стороннем модуле перекрывает одноименный системный класс (исп. в Kohana 3)
 

korchasa

LIMB infected
TheGP
Почитай, что-нибудь нормальное про ООП. Посмотри как реализованы чужие фреймворки.
 

newARTix

Новичок
Для расширения ZF я использую наследование. И, в большинстве случаев, можно спокойно обновлять ZF не нарушая работу моих классов.
На самом деле у меня даже двойное наследование. App -> MyLib -> ZF. Обновление классов из библиотек MyLib и ZF проходит без проблем.
Однако, это пол беды. Гораздо интереснее выглядит обновление всяких системных вьюшек, js скриптов, схем БД... вот это уже задачка не для слабонервных. Я предпочел вообще не делать автообновление, это могут позволить себе только очень крупные и (в итоге) очень неповоротливые системы. У меня голова начинает болеть когда я задумываюсь об обратной совместимости ВСЕГО приложения. Эту задачу даже коммерческие системы решают с очень переменным успехом и всегда в ущерб гибкости.
 

TheGP

Новичок
Спасибо всем за ответы.

korchasa что порекомендуешь по ООП?:) в версии 5.3 кучу всего добавили, но на многих хостингах она еще недоступна..

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

korchasa

LIMB infected
TheGP
Я имел ввиду теорию, а не реализацию. Макконнелл, Буч, Голуб.

Расширять можно разными способами. Где и какой применять в этом и вопрос.
 
Сверху