Шаг 98 - Правила COM и интерфейсы

Одно из правил COM гласит - нельзя изменять интерфейсы. Это правило основано на следующей идее. Допустим, Вы создаете COM объект, который умеет обращаться к базе данных и получать необходимую Вам цифру. Например, с интерфейсом IGetNumber. Этот интерфейс возвращает Вам число, например котировку $USA. Для этого элемента COM создается клиент, который умеет использовать этот интерфейс. Он спокойно обращается к IGetNumber и получаем число.

Вы создаете новый COM объект который будет возвращать не только число но и массив чисел. Что нужно сделать. Правило - Интерфейс менять нельзя. Значит нужно создать новый интерфейс IGetNumber1 который будет реализовывать новые возможности. Соответственно старый клиент будет пользоваться старым интерфейсом а новый и старым и новым если нужно, или просто новым. Если же новый клиент будет получен раньше чем новый COM то он просто не будет иметь новых возможностей.

Вы можете реально увидеть, что в жизни так и происходит. Вот, например объект Application из MS Office имеет два интерфейса Run.

_Application::Run
_Application::_Run2

Такое же повторение Вы можете найти если будут использовать объект Exploler. Там есть метод Navigate, Navigate2 и так далее.

Это правило сделано для совместной работы COM. Ведь действительно на данный момент разрабатываться COM объекты чуть ли не по всему миру. И представьте, что будут произвольно меняться интерфейсы. Все старые клиенты просто перестанут работать, а этого допустить нельзя. Кроме специальных целей естественно. Ну, например Вы поставляете и COM объекты и клиентов вместе. Если Вы не хотите что бы Вашими объектами пользовались другие очень даже неплохой выход менять интерфейсы в каждой новой версии. Но наверно есть другие методы защиты более эффективные.


Предыдущий Шаг | Следующий Шаг | Оглавление
Автор Каев Артем - 24.08.2001