Re: Улучшенный COM
От: Vi2 Удмуртия http://www.adem.ru
Дата: 09.08.02 06:28
Оценка:
Здравствуйте sakhmechet, Вы писали:

S>Прошу заренее извинить за то, что не пишу русским фонтом. Я постараюсь это устранить как можно быстрее.

Proshu zaranee izvenit' za to chto ne pishu russkim fontom. Ia postaraus' eto ustranit' kak mojno bistree.

S>Уже давно у меня была идея написать "улучшенный СОМ". Для своих проектов я использую свои библиотеку, которая своеобразный менеджер компонентов.


Это твоё неотъемлемое право. Как такое же как у меня при разработке моих улучшений для меня.

S>СОМ это далеко не единственный потенциальный план(конструкция?дизайн? design), который может решить поставленные им (СОМ-ом?дизайном?) проблем. Хочу услышать мнения по поводу моих идей, которые я привожу ниже.


S>Мне кажется, самая главная ошибка, которую допустили разработчики СОМ состоит в том, что для клиента нет разницы между компонентом и интерфейсом.


Действительно ли нет? Что он создаёт и чем пользуется?
Ты скажешь: "клиент создаёт интерфейс и пользуется им" или "клиент создаёт компонет и пользуется им" (если бы не было разницы!) — и оказывается, что построить-то на этом базисе что-то стОящее (или работающее) и нельзя.

S>Чтобы объяснить мою точку зрения, я приведу пример С++ кода:

S>class IClass1 {...};
S>class IClass2 {...};
S>class CMyClass : public IClass1, public IClass2
S>{
S>    ...
S>};

S>// рассмотрите следующий отрывок:
S>CMyClass class;
S>IClass1 i1 = (IClass1)class;
S>IClass2 i2 = (IClass2)i1;         // самый важный момент


S>Посмотрите на последнюю строку кода. Мы пытаемся получить один интерфейс из другого, абсолютно не имеющего ни какого отношения к первому. Естественно это не имеет смысла. А ведь именно это является основным требованием СОМа. Все интерфейсы компонента должны знать обо всех других интерфейсах. Это абсолютно не интуитивно для клиента и предоставляет основную проблему в написании объекта для сервера. Не лучше ли при вызове CoCreateInstance получать указатель к компоненту, из которого можно было бы вызывать QueryInterface()? Это бы значительно облегчило работу с СОМ-ом, написание и использование объектов и т.д.


А тут и нет никаких проблем, как для клиента, так и для сервера.
Есть проблемы взгляда на мир компонентов глазами С++ программиста и ужаса при мысли, что, оказывется!, не все компоненты представимы в виде С++ классов. Вот ужас-то!
Но СОМ — это вовсе не "С++ Object Model".

S>Конечно приведённый вверху код работает при использовании указателей и dynamic_cast<>. Но это вряд ли является правильной постройкой плана(конструкции?дизайна? design), абсолютно не интуитивно и не должно быть использовано в хорошем коде/разработке(конструкции?дизайне? design). Что интересно, ни в одной книге/статье про СОМ не указывается, что его план(конструкции?дизайна? design) мог бы быть другим, и никогда не приводится примеров, каким он мог быть и почему настоящий план(конструкции?дизайна? design) является лучше этого примера.
Vita
Выше головы не прыгнешь, ниже земли не упадешь, дальше границы не убежишь! © КВН НГУ
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.