Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: Технология COM в реальной жизни  (Прочитано 25118 раз)
0 Пользователей и 2 Гостей смотрят эту тему.
FallenSoul
Опытный

ru
Offline Offline
Пол: Мужской

« : 03-07-2009 21:41 » 

Добрый день. Сейчас занялся изучением СОМ, по книге "Основы СОМ. 2е издание. Дейл Роджерсон". Хотел бы узнать у знающих людей,- кто и где использует сию красоту, как интерфейсы, компоненты, таблицу виртуальных функций, интерефейс IUnknown, 3 функции работы с интерфейсами QueryInterface, AddRef, Release?  Улыбаюсь
Уж очень всё подробно и классно описано в этой книге, но интерисует- это всё востребовано и работает?
Записан
RXL
Технический
Администратор

Offline Offline
Пол: Мужской

WWW
« Ответ #1 : 04-07-2009 07:21 » 

Например, VB целиком и полностью работает с COM, т.к. все его классы являются COM-компонентами. Если необходимо доработать существующее приложение или использовать какие-либо его сервисы в другой программе, приходится работать с COM.

Еще пример: у нас на работе биллинговая система (стороннего производителя Mindport/Entriq/Irdeto) написана на VB.NET и работает с клиентскими модулями через DCOM. Впечатление от такой технологии: тормоз, а временами - жуткий тормоз. Как бы подтверждая тупиковость этого направления, следующая версия этого ПО у них написана web-based.

Сейчас довольно популярен SOA, куда можно отнести и DCOM.

Лично мне больше нравится традиционный подход интеграции ПО - через библиотеки.
« Последнее редактирование: 04-07-2009 07:24 от RXL » Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
WDMclient
Гость
« Ответ #2 : 02-01-2010 07:39 » 

Изучая С++ я как-то недопонимал как им пользоваться используя всю его силу.

Приемов уйма , и все по идее классные.   Но все это техника , а когда
внедрился в COM.  То врубился что вот это и есть основное направление  С++.

COM позволяет по максимуму понять и использовать возможности С++.
К тому и сам COM уходит еще в глубину недокументированности , короче есть где мозгам разгуляться.(Это интересно!)

ActiveX , OLE , COM(CORBA) - ну конечно это все востребовано и чем дальше
тем больше.
« Последнее редактирование: 02-01-2010 08:11 от WDMclient » Записан
lapulya
Молодой специалист

ru
Offline Offline

« Ответ #3 : 02-01-2010 12:21 » 

ИМХО

Если приложение пишется на одном языке (С#, ява, c++), то COM абсолютно не нужен (он наоборот только все усложняет).

Мое мнение таково, его нужно использовать там где без него обойтись невозможно, во всех остальных случаях его использование нанесет только вред. Типичный пример, когда необходимо использовать COM это например нужна связка VB и еще что-то, вот тут без COM не обойтись (ну не умеет VB ни с чем другим работать)
Записан

С уважением Lapulya
zubr
Гость
« Ответ #4 : 02-01-2010 14:55 » 

Код:
Изучая С++ я как-то недопонимал как им пользоваться используя всю его силу.

Приемов уйма , и все по идее классные.   Но все это техника , а когда
внедрился в COM.  То врубился что вот это и есть основное направление  С++.
Ну вообще то и Object Pascal не хуже с COM справляется, как в создании COM-объектов, так и в их использовании.
Записан
WDMclient
Гость
« Ответ #5 : 03-01-2010 05:24 » 

ИМХО

Если приложение пишется на одном языке (С#, ява, c++), то COM абсолютно не нужен (он наоборот только все усложняет).

Мое мнение таково, его нужно использовать там где без него обойтись невозможно, во всех остальных случаях его использование нанесет только вред. Типичный пример, когда необходимо использовать COM это например нужна связка VB и еще что-то, вот тут без COM не обойтись (ну не умеет VB ни с чем другим работать)

Ну если так рассуждать , то можно вообще и без С++ , на чистом ACMe шпарить.

На самом деле нет ни одной возможности определить где нужен COM .
Но если твоя прога достигнет 10000строк ты вспомнишь С++
достигнет  100000строк и тут то узнаешь преимущество COM.
COM это лишь отчасти  клиент-сервер ,в основном это упорядочивание объектной среды вообще.

Применение COM ,  избавляет от ненужного мусора в программе когда начинаешь изобретать
на базе С++ собственные объекты-инвалиды творческого мышления .
Короче: объекты - это хорошо , а интерфейсы они и в африке интерфейсы
« Последнее редактирование: 03-01-2010 05:36 от WDMclient » Записан
lapulya
Молодой специалист

ru
Offline Offline

« Ответ #6 : 03-01-2010 12:05 » 

WDMclient, совершенно не согласен, еще раз говорю, если программа пишется на С++, то СОМ:
1. замедляет работу
2. затрудняет портирование на другие платформы
3. отдает на откуп внешних механизмов (каждое такое обращение это время, ресурсы и передача ответственности) связанность
4. безбожно жрет ресурсы
и т.д. и т.п.

Цитата
Ну если так рассуждать , то можно вообще и без С++ , на чистом ACMe шпарить.
не вижу связи.

Цитата
На самом деле нет ни одной возможности определить где нужен COM .
Но если твоя прога достигнет 10000строк ты вспомнишь С++
достигнет  100000строк и тут то узнаешь преимущество COM.
COM это лишь отчасти  клиент-сервер ,в основном это упорядочивание объектной среды вообще.
это вода налита, а упорядочивать структуру программы я могу и без COM (и без проблем со всех сторон)

Цитата
Применение COM ,  избавляет от ненужного мусора в программе когда начинаешь изобретать
на базе С++ собственные объекты-инвалиды творческого мышления .
СОМ ни от чего не избавляет, он только геморроя добавляет. Что ты подразумеваешь под "своими собственными объектами- инвалидами", что это такое (ну там классы, структуры или что-то еще)?

Цитата
Короче: объекты - это хорошо , а интерфейсы они и в африке интерфейсы
ВОТ!!! С этим согласен на все 100% (только объекты это не СОМ объекты, а просто объекты), но это НИКАКОГО отношения к СОМ не имеет!!!

итого СОМ - полный... эээ короче ненужный механизм. Если ты можешь аргументированно доказать что он нужен, давай расскажи, а я послушаю, непременное условие - мы пишем всю программу на С++ (никаких VB, Java и т.д., т.е. баз тех мест, где без него не обойтись)

Нормальное биение программы на модули осуществляется путем распределения их в dll (обычные такие dll)

ЗЫ
Напомню, что изобретатель технологии СОМ (речь о майкрософте) признал утопичность технологии и отказался от нее, отправив ее в утиль (.net не подразумевает использование (речь о разработке новых) COM в приложениях, но позволяет используя обертки использовать СТАРЫЙ, написанный ранее код, завернутый в COM объекты)
« Последнее редактирование: 03-01-2010 12:14 от lapulya » Записан

С уважением Lapulya
Finch
Спокойный
Администратор

il
Offline Offline
Пол: Мужской
Пролетал мимо


« Ответ #7 : 03-01-2010 14:45 » 

lapulya, Я бы не говорил бы так категорично в обоих случаях. Простой пример. Мой знакомый получил тех задание. Написать веб мордочку на ASP.NET. Она должна была принимать Excell файлы. Вытаскивать данные из файла. И записывать в базу данных. Естественно, что он воспользовался COM Экселя. Чтоб потрошить файл.
WDMclient, Внутри одного проекта. COM объекты и представляют собой костыль. Причем совсем не нужный. Если ты хочеш предоставить сервис для внешнего мира. Тогда стоит думать об этом. Иначе это лишняя трата сил и времени. Хочеш работать с интерфесами, пожайлуста. У тебя есть механизм абстрактных классов. Помоему у Александреску разбиралось, как строить грани.
Записан

Не будите спашяго дракона.
             Джаффар (Коша)
lapulya
Молодой специалист

ru
Offline Offline

« Ответ #8 : 03-01-2010 23:52 » 

Finch,
Цитата
Мой знакомый получил тех задание. Написать веб мордочку на ASP.NET. Она должна была принимать Excell файлы. Вытаскивать данные из файла. И записывать в базу данных. Естественно, что он воспользовался COM Экселя. Чтоб потрошить файл.
ну позвольте.. я ж написал что:
1. код пишется полностью на одном языке, а тут используется внешняя библиотека (назовем это так)
2. я ж написал
Цитата
.net не подразумевает использование (речь о разработке новых) COM в приложениях, но позволяет используя обертки использовать СТАРЫЙ, написанный ранее код
, а это и есть старый код (новый 2010 офис, насколько мне известно, написан без использования COM).
3. То, что он воспользовался СОМ excel ни о чем не говорит, это просто его решение (ИМХО не лучшее), мог  (он же на ASP.NET мордочку то делал) и не использовать, а просто присосаться к excel как источнику данных через ado.net и он бы только от этого выиграл (я бы так и делал, о он, на мой взгляд удалял аппендицит ммм не лучшим способом)
4. Можно было (он же на ASP.NET мордочку то делал, опять же) использовать обертки .NET над COM Excel работать как с обычной библиотекой .NET, что было бы на много проще, но он просто не искал легких путей, что ж это его выбор
5. ммм список могу продолжить...
Записан

С уважением Lapulya
zubr
Гость
« Ответ #9 : 04-01-2010 05:02 » 

Не понятен о чем спор - у Net и COM главное общее предназначение - обеспечение языковой кроссплатформенности при использовании внешних программных компонентов. Обертка Net над COM - это вообще монстр, имхо, который запускает сервисы для обслуживания COM + нетовскую виртуальную машину и все только для того, чтобы использовать старую-добрую dll или exe-файл.
Записан
lapulya
Молодой специалист

ru
Offline Offline

« Ответ #10 : 04-01-2010 13:10 » 

zubr, спор в том что .NET сборка и COM сервер это разные вещи (принципиально отличается реализация, хотя идея и общая... на самом деле и обычная dll для этих целей подходит, немного не удобно, но подходит, поскольку любой язык, тот же VB может присосать dll и дернуть оттуда экспортируемую функцию - нет проблем, на лицо языковая кросс платформенность!!!, вот об этом я говорю, идея одна, а реализации разные, СОМ неудобен и медлителен, а dll и сборки .NET - быстрые и прозрачные, хотя, конечно, dll  не удобная в использовании в том же VB).

То что .NET оборачивает COM так это рулез имхо (отстой - это использование COM напрямую из .NET)! Во-первых поскольку как клиент я работаю с обычной сборкой (.NET dll) и все остальное инкапсулировано (скрыто от меня), во-вторых легко меняется без какого-либо изменения клиентского кода (т.е. моего кода). Да, это медленно (но основной тормоз тут понятное дело сам СОМ), но это мега гибко и главное, что быстрее сделать не очень то и получится, опять таки из-за самого СОМ.

Это не просто старая добрая dll, это dll в которой СОМ объект (как правило, и используют их именно как ком сервера, а не как обычные dll, в которых используют экспортированные функции и классы, даже если сам СОМ и его клиент написаны на С++).

кстати, если бы мне пришлось на С++ писать клиентский код и меня в силу каких либо причин обязали использовать СОМ как стороннюю библиотеку, я бы обязательно постарался написать внутри своего приложения враппер, чтобы при первом удобном/необходимом случае можно/нужно было поменять реализацию библиотеки (это вообще касается любой сторонней библиотеки, исходника которой у меня нет).

И еще, когда мне приходилось писать СОМ сервера для VB, то у меня была обычная dll в которой была вся начинка и СОМ сервер, который в своей реализации ее лоадил и через свои интерфейсы выводил функционал наружу.
« Последнее редактирование: 04-01-2010 13:17 от lapulya » Записан

С уважением Lapulya
RXL
Технический
Администратор

Offline Offline
Пол: Мужской

WWW
« Ответ #11 : 04-01-2010 19:28 » 

Отделил: https://forum.shelek.ru/index.php/topic,23023.0.html
Надеюсь, что жар споров перенесется туда.
Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines