Компонентное программирование
При использовании компонентного подхода можно собирать приложения из доступных компонентов, как из кубиков. Приложения больше не обязаны быть монолитными, что позволяет ослабить связи между кодом, использующим компоненты, и самими компонентами.
СОМ позволяет получать информацию о функциях объектов во время выполнения или во время разработки. Это положение имеет несколько важных следствий:
- пользователь объекта вправе отложить принятие решения об использовании услуг, предоставляемых объектом, до момента выполнения, что позволяет компоненту и клиенту работать асинхронно;
- если компонент предоставляет дополнительные услуги, это никак не сказывается на клиентах, пользующихся только базовыми функциями объекта;
- если клиент, желающий использовать расширенные возможности объекта (например, включенные в последнюю версию), сталкивается с его предыдущей версией, он может умерить свои потребности.
Таким образом, разработчики, расширяя функциональные возможности объектов, не беспокоятся о нарушении работоспособности уже используемого кода.
Применение СОМ позволяет клиенту не заботиться о физическом местонахождении компонента в файловой системе или в сети за счет самосогласованного метода взаимодействия с внутри- и внепроцессными компонентами.
Кроме того, клиентский код не обязательно писать на том же языке, что и компонент. Необходимо лишь, чтобы язык, на котором написан СОМ-клиент, позволял вызывать функции с помощью указателей на них. Для сценарных языков выполнение таких вызовов берет на себя среда выполнения сценариев.
Компонент СОМ, зарегистрированный в Microsoft Transaction Server, выполняется в отдельном процессе. При этом вызов lnProcServer32 в его коде заменяется на вызов LocalServer32, который определяет Mtx.exe в качестве замены внутри процессного сервера, что позволяет Microsoft Transaction Server создать оболочку для реального компонента.
СОМ предусматривает новую спецификацию для описания объектов, называемую метаданными. Все объекты СОМ обязаны описывать свои функции с помощью метаданных, что позволяет всем объектам предоставлять клиентам информацию о своих услугах и о любых возможных требованиях.
Примечание
. Существуют методы, позволяющие сохранять состояние клиента. Например, средствами массивов типа variant можно передать данные клиенту для локального редактирования. Другой способ — скопировать объекты клиенту для локального использования, а затем переписать их обратно на сервер для обновления состояния. Этот подход позволяет серверным компонентам не хранить состояние, однако сами объекты при этом доступны локально, так что обращение к их свойствам и методам не будет порождать дополнительный сетевой трафик.