Отправляет email-рассылки с помощью сервиса Sendsay

Создаем свой бизнес

  Все выпуски  

Создаем свою информационную систему


Информационный Канал Subscribe.Ru

Создаем свою информационную систему


Дневник. День 1

Все пора, пора наконец решиться и показать, что все наши подходы, совершенно так же работают на любых программных платформах.

Начинают утомлять совершенно дурацкие проблемы, например невозможность иметь две работоспособные версии программы, которые отличаются буквально на чуть-чуть… что поделаешь – COM. Visual Basic в этом смысле среда довольно капризная. Если сразу написал, сдал и забыл, то вроде и хорошо. А вот как начнешь закапываться, тут вся радость от COM совместимости и вылезает. Может быть это будет для кого-то новостью, но для Visual Basic 6.0 откомпилированная библиотека должна обязательно быть частью проекта, иначе ничего серьезного просто не получится. Архив исходников из-за этого за последний год занимает столько же, сколько за предыдущие 10. Пора… решиться.

Сложность еще и в том, что мы не делаем совсем новую версию системы. Это было бы слишком расточительно. Мы просто реализуем поддержку еще одну программной платформы, кто хочет работает на VB6, кто хочет на VB.NET ну такая странная форма плюрализма. Что из этого следует?  А следует, только одно – база данных и форматы сохранения документов в XML желательно сохранить. Ну и механизм доступа, естественно остается совместимым.

Всегда так - долго со скрипом собираешься, а потом за пару недель все догонишь и перегонишь. Главное – решение принято, спонтанное, но все же. Почему-то это всегда так. Очень не люблю возвращаться той же дорогой. Всякий раз когда берусь оптимизировать систему повторяется одно и тоже. Записываю все исходники на CD, попрощаюсь с ними и  оптимизирую к чертям собачьим. Ни разу еще не приходилось обратно возвращаться. Сам всегда удивляюсь, как это оно работает, почему.

 

Все! За дело… Поступать будем «прямо по-военному». Поскольку опыта серьезного письма на VB.NET  нет пока - собираем все доступные и полезные исходники.

Я рекомендую примерно следующий набор источников:

1. Пошарить на http://www.gotdotnet.ru , например Microsoft TaskVision – пример с исходными текстами

2. CodeCharge Studio – генератор сайтов с кучей примеров

3. RapTier   - еще один генератор кода  http://www.sharppower.com

 

Если не хватит, то поискать где-нибудь еще. Вообще разбираться с чужими исходниками – занятие хорошее. Надо экономить мировые ресурсы. Зачем делать что-то, что делают все? Надо делать свое.

Теперь самое веселое… Visual Studio.Net  снабжена настоящим чудом, которое называется Visual Basic Upgrade Wizard? Считается, что эта штука преобразует проекты на VB6 в проекты на VB.NET. Просто грех не посмотреть каких успехов добился «старший брат всех программистов».

Начнем с самого начала. Ядро нашей системы на VB6 составляют три библиотеки – Утилиты (MTZUtil), Управление сессией (MTZSession) и Управление объектами (MTZManager).

 

Натравим этот самый визард на три этих проекта и посмотрим на результаты. Задача у нас простая получить что-то похожее но уже на .Net и уяснить на отличия синтаксиса.

Прежде всего надо констатировать что победа-таки состоялась.

Действительно, проект почти полностью перевелся. Но перевелся он как-то странно. Ясно, например, что на VB6 я использую ADO и MSXML? Но зачем же буквально переводить все эти вызовы на .Net? Ладно, с XML, там не сложно пара глобальных замен спасает. А с доступом к базе все придется переписывать.

 

Честно скажу, я думал что все будет гораздо хуже. Особенно был приятно удивлен, тем что сохранена конструкция On error , Значит можно теперь и так и так ошибки обрабатывать. Интересно что, CreateObject тоже осталось, интересно оно только для COM работает, или можно и чисто .Net объекты им создавать? У нас уж больно много всего построено на позднем связывании. Т.е. когда в процессе компиляции про сами объекты ничего не известно. Как-то мы со всем этим будем справляться.

Для интереса надо напустить визард на проект, который наш генератор кода делает для каждого документа. Напустили... тю, а он и подох… Вот засада. Все остальное похоже придется переводить в рукопашную. Не хочет переводить библиотеки документов и все тут. А счастье было так близко, так возможно.

 

Ладно, с переводом проектов все понятно. Сегодня бы успеть в базу залогиниться. Для этого надо будет весь класс для работы с базой переделать, а потом проверить вызовы.

Приступаем… За основу взяли класс доступа, который делает RapTier. Вполне естественно, что решили использовать для доступа oledb провайдер. Все подключили вроде даже заработало, но что-то странное. Не хочет логиниться и все-тут.

В этой ситуации действия-то простые. Запускаем SQL Profiler из комплекта SQL Server и смотрим, что же наша программа пытается в базу передавать. Потом эту строчку выдергиваем и смотрим, что же на самом деле за проблема такая, что конкретно за ошибка. Оказалось все страшно просто. Не хочет .Net передавать именованные параметры в SQL процедуру. Если честно, то это странный сюрприз. Доступ через тот же самый провайдер, что и в VB 6, а поведение совершенно другое. Это как? Отчаиваться не надо. У нас еще есть звонок к другу а, в крайнем случае, подробное чтение документации. Сравниваем присланный пример с нашим – о все понятно. Надо просто использовать «оптимизированный для  SQL доступ» вот как оказывается они его оптимизировали! Сделали, чтобы работал!  Еще несколько глобальных замен типа datacommand -> sqlcommand и победа нас настигла. День прошел не зря. Все три библиотеки мы засунули в один проект, получилось довольно мило.

 

-------------------------------------- конец 1 дня -----------------------------------------------------------

 

 

Техническая информация.

Задачи первой недели такие: нам нужен компонент, функциональность которого совсем не так мала как может показаться.

  1. Соединение с базой данных, а вернее с нашим сервером приложений, роль которого выполняет SQL Server
  2. Обеспечение доступа к данным и выполнения процедур. Эти методы будут использовать все документы
  3. Обеспечение открытия (или извлечения из КЭШа) объектных моделей документов
  4. Реализация универсальных функций поиска (это в последнюю очередь)
  5. Реализация поиска объекта, который соответствует строке документа в объектной библиотеке документа по паре (название раздела, идентификатор строки)
  6. Базовые классы для корня документа, коллекций в документе, строки в коллекции

Это задача минимум, естественно нужен хоть какой-то пример, на котором мы будем все это проверять.

Задача максимум. Сделать версию генератора кода, который будет создавать исходный код для объектных библиотек документов.

 

Пока мы двигаемся очень неплохо. Что будет дальше – покажет время.

Ведущий рассылки: Михаил М. Баранов
bami@murometz.spb.ru www.murometz.spb.ru Кубики для взрослых


http://subscribe.ru/
E-mail: ask@subscribe.ru
Отписаться
Убрать рекламу

В избранное