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

Возьмём в качестве полной противоположности систему, которая собирается на уровне хаотичных include'ов, запросы к базе выполняются так же бестолково и с использованием различных API. Система в добавок написана в старом ключе, с использованием перезагрузки страниц. Т.е. без какого-либо намёка на Аякс.

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

Далее мы продолжаем развивать Аяксовость нашей системы, пока не решаем, что отдельные её куски надо сделать более единообразными. Например отображение записей в гриде. Мы быстро находим в сети какой-нибудь Джаваскриптовый грид, после чего долго чешем «репу», потому что из всего богатства функций, предоставляемых этим гридом мы можем, дай бог, использовать процентов 5 не больше. А почему? Да все потому же – наш чудовищный бэкэнд просто нельзя быстро и просто подключить в найденному фронтэнду.

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

Потом к АПИ методам выборки добавляются методы создания/изменения/удаления записей. Они оформляются в некое подобие Модели.

Со временем создание форм начинает отнимать слишком много времени, поэтому логичным этапом является создание некого конструктора форм или прикручивание чужого. Теперь в системе появляется Вид. Ну и Контроллер вслед за ним.

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

Можно продолжить дробить код дальше получив уже не набор кирпичей, а кубиков, из которых собирать другие системы станет ещё проще, просто в силу небольшого размера «атомов». Я, помнится, в своё время несколько раз неделю переписывал код физического движка для игры. Это стало возможным, как раз благодаря большому набору маленьких функций на все случаи жизни.

Можно пойти дальше в структурировании системы, добавив мета-данные для таблиц, методов и прочего. Все это позволит еще больше упростить оперирование кодосущностями, т.к. мы теперь досконально знаем какой кусок кода, за что отвечает и можем его использовать в любом другом месте.

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

Словом, можно при желании пройти путь от «хрен знает, как это работает» до «любой каприз за ваши деньги». Каждый, понятно дело, выбирает сам )

Добавить комментарий


Защитный код
Обновить