Общий код.
Вторник, Август 26th, 2008Вот и отпустило немного на работе, в свзяи с чем продолжим.
Многие из нас сталкиваются с проблемами поддержки различных версий оборудования, в связи с чем написаный код часто превращается в монолог В.Винокура, о игре на нотах. Для тех кто не знает о чем я, напомню. В монологе актер просит аккомпониатора-пианиста играть по принесенным нотам, дополняя это своими коментариями, где играть, а где не играть. Тут играть, а вот где жирное пятно не надо, тут рыбу заворачивали.
Так и в нашем случае, при изменениях в оборудовании куски кода отделяются #define диррективами. Это решение на уровне компиляций позволяет поддержать достаточно большое колличество версий, но заставляет постоянно создавать все большее колличество сборок (билдов), каждая из котороых отвечает за определенную версию железа.
Однако, частенько такое решение не подходит, так как наше оборудование вполне может быть динамически заменяемым, апгрейднутым юзером, что накладывает на наши драйвера и прочий код требования поддержать различные версии в ран-тайме.
Решение тут тоже обычное, при создании драйверов, внешний интерфейс превращается в набор указатей на стандартные функции, заполнение которых зависит от того типа девайса, который найден при старте системы.
Но, что делать если код уже однажды был кем-то (возможно и вами) нписан как раздельный для различных сборок и надо его привести к общему знаменателю? Или если код чужой? Т.е. измненения контекста или наименования функций приводят к многократной переделке и замене всего и вся в самом коде, что уже довольно большой риск?
(more…)
