Re[4]: А вам эти рассуждения не напоминают вот это :)
От: Znow  
Дата: 12.09.02 16:09
Оценка: 30 (2)
Здравствуйте Poudy, Вы писали:

P>Блестяще! Все больше недовольства в постах.

P>Люди собрались неглупые, и есть еще одна вещь, которая всех объединяет: многим пришлось работать над крупными проектами очень малыми силами. Не двести, а пять/десять человек на проект (а то и вовсе один). Именно в таких ситуациях и проявляются слабые места существующих систем.

Ну, я не очень согласен... Я думаю, чем более полна поддержка программисту, тем лучше — независимо от того, какова команда.

Вот пишу я сейчас (на этот раз в одиночку) модуль (COM) для довольно-таки большого проекту. На Си++.

Что мне не нравится?

Во-первых, строки. Получаем BSTR, проверяем на длину, чтобы не грохнуть стек, преобразуем посредством OLE2T, имеем LPTSTR. Затем, для разных целей: то используем LPTSTR, где-то, опять-таки необходимо применять порою T2A или T2W, то CString, то std::string и std::wstring (вот ведь как оборачивается: средство стандартное, практически — часть языка, но использовать его жутко невозможно). Или же применяю CComBSTR — ну, чуть полегче, но не дай Бог забыть Attach или Detach. В конце ответ запихиваю опять в BSTR. Задолбало! Это свойство, в первую очередь, сложившейся практики программирования на Си++ под COM. Можно много говорить о правильном проектировании и т. д. и т. п. Но практически применимого рецепта выхода из этого маразма я не вижу.

Во-вторых, исключения. Структурная обработка исключений — страшная сила. Но нельзя передать исключение "сквозь" COM-интерфейс. Приходится отлавливать довольно много типов исключений на верхнем уровне — т. е. непосредственно в каждом методе реализации интерфейса — и упаковывать их в некие структуры для возврата вызывающей стороне (что, кстати, уродует сам интерфейс). Или использовать HRESULT (хотя его зачастую недостаточно) и IErrorInfo (а кто вам сказал, что мне достаточно текстового описания ошибки?). Это свойство уже COM (хотя я и сам не уверен, что скрестить SEH и COM возможно).

В-третьих, поддержка системных вещей — таких, как журнализация, работа с транзакциями и т. п. Такие вещи замечательно делаются с помощью аспектов (чтение о них привело меня в восторг) при системной поддержке, каковую, как я понял, оказывает Дотнет. А вот в Си++ этого не сделать. Если кто и знает как, пусть поделится: вот у меня есть метод COM-сервера, открыта фигурная скобка. Как ему рассказать о журналах, о транзакциях?

Ну я еще могу привести в-четвертых, в-пятых и в-дватцать шестых.

Мне скажут: смени COM на что-то еще (например, на Кобру, гы-гы!). Не могу, т. к. встраиваюсь в уже имеющуюся систему.

Скажут: пиши, ну скажем, на VB — там хоть часть проблем снята. Опять не могу, т. к. мне, по характеру задачи, нужны потоки, семафоры, события. Дельфы здесь не в почете...

Скажут: ну чем же тебе язык тут поможет?

Отвечу: хорошая среда разработки избавила бы меня от рутины. Под рутиной я вот что понимаю: мне приходится выполнять много действий вручную. Что мог, я упростил донельзя, даже написал несколько макросов, чем обычно гнушаюсь, но ручной работы — на каждом методе — довольно много.

Так вот, чтобы ничего не забыть, я записаваю себе разные таблички в тетрадочку, а потом ставлю галочки, черкаю... Такая тетрадочка в клеточку, раньше 3 коп. стоили . Инструментарий программиста, так сказать . Ну собственно, это то, о чем тут рядышком писал Anatolix, — потепенное ужесточение и введение в действие различных требований к программному коду.

Понятно, к чему я веду? Мало того, что среда не избавляет от рутины, она даже и не дает средств к организованному ее преодолению.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.