[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Расширение простого скрипта
abracadabra
Есть относительно простой скрипт (350 строчек, что выполняет - не важно, но вообще это callback на вызов платёжной системы), задача который расширить. При этом поведение скрипта несколько меняется, но новое поведение должно быть доступно только при включении соответствующей настройки (пусть просто булева переменная $new).
Скрипт - это простой код без классов.

Проблема состоит в том, что дописание кода с использованием конструкции if (if($new) {/*новое поведение*/} else {/*старое поведение*/}), постепенно превращает код в гордеев узел для чтения. Затем может понадобиться и ещё что-то дописать и код будет устрашающе расти и запутываться.

Решение превратить код в класс, разделить всё выполнение на методы, а затем наследованием расширить этот класс до нового класса, переопределив только те методы, которые поменялись - красивое, но существует вероятность при превращении исходного кода в класс что-то забыть, что-то напутать (например, какую-то переменную, которая должна быть доступна во всех методах, забыть сделать свойством объекта класса), и в итоге что-то где-то сломается, то есть нужно будет ещё одно серьёзное тестирование (тестировать данный скрипт не очень просто, так как он много что меняет в базе и уследить за всем не просто).

Пытаясь найти идеальную середину между читаемостью кода (простотой последующего расширения) и Гиппократовским принципом "не навреди", что посоветуете?

Спасибо большое!



Спустя 2 минуты, 43 секунды (30.11.2011 - 14:07) Игорь_Vasinsky написал(а):
непонял... так нечитабелен, сяк - боишся сломат.

расширяй в процедурном стиле, придерживаяся стиля

обильные комменты в начале кода

обильные комменты по ходу кода.

Спустя 20 минут, 13 секунд (30.11.2011 - 14:27) TranceIT написал(а):
Для удобочитаемости можно использовать функции.

if (/*условие*/)
function func1();
if (/*условие*/)
function func2();
if (/*условие*/)
function func3();
if (/*условие*/)
function func4();
if (/*условие*/)
function func5();

Отлично читается... Функции в том же порядке в начале файла. Или даж каждую ф-цию в отдельный файл и подключаем по необходимости.

Спустя 12 минут, 27 секунд (30.11.2011 - 14:39) johniek_comp написал(а):
А вы понимаете зачем вообще нужны классы? Я бы за комментировал и не парился бы этому поводу.

Спустя 13 минут, 51 секунда (30.11.2011 - 14:53) killer8080 написал(а):
abracadabra
а так user posted image
if($new)
include 'new.lib.php';
else
include
'old.lib.php';

и читабельно, и старый код трогать не надо. Тупо выносишь его в отдельный файл.

Спустя 21 час, 47 минут, 12 секунд (1.12.2011 - 12:41) abracadabra написал(а):
Игорь_Vasinsky, TranceIT, johniek_comp, killer8080
Спасибо огромное за ответы! Очень приятно - такой отзывчивый форум! =))

TranceIT
Да, это самый подходящий вариант, спасибо!

killer8080
В условиях того, что старый код постепенно станет невостребованным, этот вариант тоже очень классно подходит, спасибо!
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.