2009-03-12 3 views
5

Я планирую обновить большое приложение vb6 до .net. В проекте используются многие сторонние компоненты, например VSFlexGrid, а также отчеты о кристаллах. Он также использует старые DLL VB6, исходный код которых недоступен. Мои вопросы:Лучшие средства разработки для обновления с VB6.0

  1. Должен ли я преобразовать исходный код в C# или VB.net достаточно прочный? Что мне делать с сторонними компонентами, которые не поддерживаются или которые используют небезопасные/устаревшие технологии?

Я приветствовал бы любой полезный вклад от любого, кто сделал это раньше.

ответ

7

Ниже приведена адаптация couple моих answers к аналогичным вопросам.

Преобразование автоматически является лучшим выбором, чем переписывание. Это общая ошибка, чтобы начать оптимистично переписывать большое программное обеспечение, сделать хороший ранний прогресс, исправляя некоторые из известных недостатков старой архитектуры, а затем увязнуть в функциональности, которую вы только что принимали как должное в течение многих лет , На этом этапе ваше управление начинает нервничать, и все может стать очень неудобным.

... и вот блог на Microsofty что agrees with me:

Многие компании я работал в первые дни .NET первый посмотрел на перезапись частично вызвано сильным желанием улучшить базовой архитектурой и структурами кода одновременно с переходом на .NET. К сожалению, многие из этих проектов столкнулись с трудностями, и некоторые из них никогда не были завершены. Проблема, которую они пытаются решить слишком большой

Это отличный Microsoft page рекомендует две миграцию третьей стороны инструментов, как лучше (больше не available) встроенной в VB.NET обновления мастера - Artinsoft и CodeArchitects VBMigration. Я считаю, что у них есть поддержка для сторонних элементов управления и DLL - Artinsoft suport these. Стоит обратиться к ним со списком ваших зависимостей. VBMigration имеет free tool, который будет перечислять зависимости только по этой причине. Также стоит обратиться к оригинальным поставщикам в надежде на эквивалент .NET.

страница Microsoft также говорит:

Выполнение полного переписывания для .NET является гораздо более дорогостоящим и трудным сделать хорошо [чем преобразование] ... мы бы только рекомендовать этот подход для небольшого числа ситуации.

Есть еще много разработчиков на C#, чем разработчики VB.NET в Stack Overflow, поэтому вы, вероятно, получите несколько ответов, рекомендующих C#. Также исторически Microsoft, как правило, поддерживала C# с большим энтузиазмом с точки зрения примеров кода для новых частей .NET и так далее. Но Microsoft делает сейчас assure нам, что:

Оба [C# и VB.NET] являются языками программирования первого класса, которые основаны на платформе Microsoft .NET Framework, и они одинаково сильны.

Так что это личное решение, хотите ли вы выбрать C# или VB.NET. Инструмент Artinsoft утверждает, что он может конвертировать VB6 в C#.


EDIT: Я только что нашел другую жертву - NewCode - через объявление на сайте программирования!

Мое мнение, что сайт не так подробно, как два конкурента, о которых я писал выше. Это может быть несправедливо. Какой-то парень в Microsoft Ireland blogged о них - я думаю, они основаны в Ирландии. По-видимому, инструмент преобразует ваш VB6 в DSL, а затем в VB.NET Winforms, C#, WPF, Java ...

3

Модернизация; даже если существуют механические инструменты, это вряд ли поможет вам. Это не сделает его магически хорошо подходящим для .NET, или сделает очень достойное использование структуры. Я всегда предпочитаю переписывать в этом сценарии, но у этого есть связанные риски/затраты. Например, некоторые мои коллеги в настоящее время переписывают некоторый код VB6/ASP/COM +/xslt для использования ASP.NET MVC - большая часть «интересного» кода на самом деле является бизнес-логикой, которая не является массово сложной для переноса (трюк проверяет его; -p). Это помогает в компоновке нашего кода VB6, что позволяет нам переносить отдельные фрагменты без необходимости одновременного нажатия всей партии.

Сторонние элементы управления будут неприятными, и это звучит так, как будто другие dlls, возможно, требуют обратной инженерии. Не тривиально.

Выбор между C# и VB.NET в основном вторичен. У обоих есть некоторые незначительные преимущества, но в целом вы можете делать большинство вещей. Если вам нужен COM-взаимодействие, то VB.NET может быть полезен (либо для всего, либо для конкретной сборки), но C# 4.0 (в VS2010) подключит этот пробел с помощью нового ввода dynamic и изменений без PIA. В целом, я значительно предпочитают C#, но это должно быть местным решением.

+0

Перед тем, как приступить к переписыванию: сначала оцените его, возможно, используйте количество строк кода VB6 в качестве руководства. И убедитесь, что ваше руководство полностью находится на борту. И возьмите обучение по разрешению конфликтов на всякий случай :) Я начал спускать дороги, как это, и попал в некоторые неудобные места. – MarkJ

2

Я говорю об этой проблеме here

Первый и самый важный шаг, это сделать существующее приложение в .NET, как вы можете. Все, что связано с VB6 или полагается на стороннее управление, получает как можно больше за интерфейсы. Интерфейс покажет именно то, что вы используете для стороннего вещания и для какого поведения сначала. Делая это в VB6, вы можете запускать тесты на единицу и интеграцию, чтобы убедиться в том, что поведение PRESERVED. Это ключевой элемент, который сохраняет поведение вашего приложения.

Что касается проблемы между C# и VB.NET. Между этими двумя языками функционально мало различий. Один из моих проектов конверсии еще в 90-х годах - это приложение CAD/CAM моей компании с базового диалекта, известного под названием Rocky Mountain BASIC, в Visual Basic 3. У нас было несколько фальстарта до этого, и нам стало известно, а потом доказано, что это гораздо легче сохранить поведение, переключившись на другую базовую семейную линейку, чем преобразовать ее в совершенно иное языковое семейство, такое как C.

Поймите, что в наших обстоятельствах у нас много математических подпрограмм, и математика - одна из немногих областей, остается относительностью, совместимой с семейством языков BASIC. Поэтому мой опыт не будет на 100% применимым к вашему делу.

Мое мнение, что кратковременность языков стиля C является вредом для долговременной ремонтопригодности (десятилетия). Однако, чтобы быть справедливым, это в лучшем случае незначительный момент. У меня есть большой опыт работы на обоих языках, когда я пишу и поддерживаю моделирование космической капсулы Меркурия и Джемини, написанной на C++, с некоторыми утилитами, написанными на C#, в дополнение к программе CAD/CAM в VB6/VB.NET для моей компании.

Прямо сейчас наш.Преобразование NET сосредоточено на VB.NET. Я нашел автоматические инструменты почти бесполезными, поскольку мы являемся тяжелой графической программой. К счастью, мы не используем прямые вызовы VB Graphics, а помещаем все за интерфейс холста. Для совместимости с печатью мы используем библиотеку совместимости принтеров с VB Power Pack в качестве отправной точки.

У нас есть инструмент, с помощью которого мы запускаем наш код, который преобразует все целые числа для ввода Int16 и всех длин, чтобы ввести Int32 плюс несколько других обычно сделанных преобразований. Затем мы помещаем преобразованный класс или подпрограмму в нашу библиотеку .NET и выполняем модульные тесты. Результаты сравниваются с теми же тестами, что и в исходном коде VB6.

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

0

Вам не понравится мой ответ, но здесь идет.

a) Нанять кого-то со значительным опытом в создании больших приложений .Net, чтобы прийти и руководить проектом и научить вас.

b) Извлеките бизнес-требования из текущего приложения и заморозите их.

c) Отпразднуйте тот факт, что это должен быть самый простой проект разработки приложений для зеленых месторождений, потому что у вас есть кто-то с опытом в технологии, которая поможет вам, у вас есть зрелые инструменты для создания приложения и наличия четко определенного набора требований , поэтому вы точно знаете, что строить.

P.S. На данный момент я бы не стал беспокоиться о Winforms. Я бы прыгнул прямо в WPF, вы поблагодарите меня позже.

P.P.S Язык на самом деле не имеет значения (C# или VB.Net). Усилия будут одинаковыми.

+0

И перед тем, как вы начнете, вы должны с уверенностью сказать, что в качестве руководства можете использовать количество строк кода VB6. И убедитесь, что ваше руководство полностью находится на борту. И возьмите обучение по разрешению конфликтов на всякий случай :) Я начал спускать дороги, как это, и попал в некоторые неудобные места. – MarkJ

1

Я начал переделывать приложения из моей компании, написанные на VB6, на VB.NET. Оба C# и VB.NET полагаются на платформу .NET, и различия между приложением, скомпилированным в одном, ничтожно. Выберите язык, который вы и другие, работающие над проектом, почувствовали себя более комфортно. Одно преимущество использования VB.NET (хотя я не решаюсь назвать его таким), вы можете использовать функцию «Обновить Visual Basic 6 Code» в Visual Studio. Есть некоторые вещи, которые исправляет конвертер, и многого нет. Если вы хотите попробовать это, вы должны очистить свой код VB6:

  • Все массивы должны быть равны нулю на основе
  • Избегайте использования строк фиксированной длины, если это вообще возможно. Этот код нужно будет изменить, чтобы использовать массивы Char в vb.net.
  • Явно объявляю все переменные. Используйте Option Explicit, если вы еще не
  • Избегайте вариантов, как чумы, если вы абсолютно не должны использовать один для вызова API
  • Укажите ByRef или ByVal при передаче параметров, не полагаться на поведение по умолчанию для этого
  • Всегда указывайте, какое свойство вы меняете, свойства по умолчанию не существуют в vb.net. Например, «txtName = strName» становится «txtName.Text = strName»
  • Гораздо более подробный перечень этих различий можно найти here

Даже после очистки существующего кода лучшее, что вы можете, преобразование еще ISN 100%. Вы можете попробовать это в отдельном проекте, чтобы увидеть, что вы получаете, чтобы дать вам идеи о том, как нужно перерабатывать вещи.Иногда формы выглядят уродливыми после конверсии, а для некоторых вещей вы можете в конечном итоге переделать их с нуля в любом случае.

Многие из наших форм сильно использовали свойство ItemData в списках со списком, которые больше не существуют в .NET. ListViews также работают по-разному, и ни одна из функций чертежа не меняется. Некоторые формы из приложения, которое я конвертировал, выглядели очень плохо, когда преобразовывались в элементы управления .NET и не вели себя одинаково, поэтому я просто собираюсь в конечном итоге переработать их с нуля. Преимущество заключается в том, что я получаю переработку процессов, которые были не очень эффективными для начала, но, конечно, это занимает намного больше времени. Поделитесь этим тем фактом, что я все еще изучаю, что делают библиотеки .NET. Да, это займет некоторое время.

+0

Неужели это не так сложно работать с ItemData? Например, попробуйте это (просто Googled он, не пробовал) http://www.mgbrown.com/PermaLink37.aspx – MarkJ

+0

@MarkJ - В конце концов я столкнулся с проблемой, используя метод, очень похожий на этот. :) –

+0

Francesco Balena придумал сладкое решение для ненулевых связанных массивов в VB.NET с использованием дженериков: http://www.dotnet2themax.com/blogs/fbalena/PermaLink,guid,08e740fc-f486-4b5b-8796- 6aad43e08815.aspx – MarkJ

2

Я бы предложил вам частично переписать ваше приложение. Причудливое название этого подхода задушено (http://martinfowler.com/bliki/StranglerApplication.html).

Я предполагаю, что это приложение для базы данных. Посмотрите, можете ли вы переписать некоторые функции, напрямую разговаривая с БД. Не беспокойтесь о том, чтобы пользователи использовали два приложения. Старое приложение достаточно плохо для них, чтобы попросить обновление.

Мое другое предположение, что, поскольку это VB6, у него нет очень хорошего разделения интерфейса/BusinessLogic. Вот почему автоматическая модернизация не заставит вас слишком многого.

Возможно, я ошибся в вашей ситуации. Вы должны спросить, сколько вы действительно можете выйти из существующего кода. Купить/прочитать книгу кодов устаревшей книги Майкла Пера.

0

Вопрос заключается в прямом запросе информации о «Лучших инструментах разработки для обновления с VB6.0» для большого, сложного обновления VB6/COM и второго о C# или VB.NET.

Совершенный «преобразования» инструмент поможет вам удовлетворить два важнейших целей каждой модернизации

  1. Сохраняя функциональность
  2. Воспользовавшись .NET таким образом , который следует нужную кодировку и стандарты зависимостей платформы

роль инструмента в Сохраняя функциональность

Большие, зрелые устаревшие системы могут содержать тысячи файлов кода и миллионы строк кода. Усилия, необходимые для полного описания и проверки функциональности, воплощенной в этом большом количестве кода, являются массовыми. На самом деле, может быть так много функциональной работы, что некоторые технически настроенные команды не видят ее сначала. Они тратят большую часть своего времени на беспокойство о том, как использовать последние возможности .NET, язык и инфраструктуру, прежде чем полностью оценить, насколько сложно будет сохранить и проверить устаревшие функции. Это похоже на то, что они ловят рыбу из огромного функционального кита, беспокоясь о том, чтобы поймать небольшую техническую рыбу.

Команды, которые пытаются воспроизвести гору кода, прочитав, интерпретируя и перекодируя его вручную, могут выглядеть слепыми в процессе ... Поэтому критическая особенность любого инструмента преобразования - помочь команде читать, интерпретировать и переписывать их кода, переписывая его в форме, которая сохраняет свою семантику. Ученые-компьютерщики изучили проблему чтения интерпретаций и перезаписи исходного кода на протяжении более 60 лет, и решение, которое они придумали, называется компилятором. Эффективный код «конвертер» работает как компилятор.

VB6 - это язык высокого уровня: компилятор Microsoft VB6 и его среда выполнения неявно выполняются: управление типом вывода, неявные преобразования, неявные по ref, поздние вызовы, обработка нулей, обработка ошибок в стиле goto, проектирование формы и т. д.Конвертер VB6 должен также иметь возможность распознавать и хранить множество подробностей, явно не указанных в коде, и он должен иметь возможность правильно выражать эти детали в .NET. Инструмент преобразования промышленной силы будет иметь мощную расширяемую систему метаязыков VB6, которая позволяет пользователю контролировать, как код VB6 распознается и интерпретируется.

VB6 также легко расширяется через COM. Существует много сотен различных API-интерфейсов COM, и это не учитывает все внутренние компоненты, которые обычно входят в состав корпоративных систем. Конвертер должен иметь возможность распознавать любой COM-класс или элемент управления, используемый VB6, как в дизайне пользовательского интерфейса, так и в коде, и выражать его, используя какой-либо другой соответствующий .NET API или interop. Один из инструментов, о котором я знаю, может даже генерировать структуру кода .NET из информации об использовании COM в VB6. Инструмент преобразования промышленной силы будет иметь мощную систему COM-типа, которая расширяема и позволяет пользователю контролировать замену COM в сгенерированном коде.

Роль инструмента в Воспользовавшись .NET

VB6 и .NET отличаются во многих отношениях, и поэтому являются различные интерфейсы, которые поддерживают две платформы. Таким образом, с инструментами или без, почти всегда потребуется какой-то перепроектированный дизайн. Кроме того, каждая команда привносит в свой проект различные предпочтения, ограничения и требования: спросите 10 программ, как закодировать что-то, и вы получите как минимум 10 различных ответов. Конвертер должен помочь команде выразить свои уникальные предпочтения, ограничения и требования. Это включает в себя предоставление повторяющихся, самодокументирующих средств модификации кода VB6 перед его обработкой, модификацию кода .NET после его создания, интеграцию рукописного кода, описание пользовательских замен API, направление пользовательской реструктуризации кода и выполнение многих других динамических и проектных -специфические преобразования по мере необходимости.

Собираем все вместе

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

Еще один комментарий о инструментах преобразования. Самый важный «инструмент», который вы будете использовать в обновлении .NET, - ваш мозг. Вы должны изучать языки .NET, шаблоны проектирования и фреймворки и применять то, что вы знаете при обновлении. Лучший автоматизированный инструмент не решает для вас, как переписать код: он помогает вам повторно реализовать устаревшую функциональность в соответствии с дизайном, который вы решаете, имеет смысл.

Microsoft предлагает несколько инструментов в этой статье. VB6 Upgrade Partner Tools

VB.NET или C#

Когда я задаю .NET сообщества (т.е. поиск в Интернете) для получения информации, инструменты, идеи, код, и помочь с проблемами программирования, я гораздо более вероятно, найти ответы, выраженные в C#, чем в VB.NET. Я также считаю, что компилятор C# лучше подходит для перепрограммирования с помощью инструмента, поскольку он требует, чтобы сгенерированный код был более внутренне согласованным и явно описанным. Получение и хранение сборки - это несколько грубый, но абсолютно критический тест качества кода и ключевая веха в любых усилиях по обновлению. Помните, что VB.NET - это не VB6.Это звучит очевидно, но его трудно помнить, потому что оба языка выглядят одинаково. Это сходство может обманывать; поэтому ИМО лучше пойти на C#, где вам напоминают, что правила разные. Наконец, C# всегда был и продолжает разрабатываться для .NET; VB.NET не может этого сказать.

Отказ от ответственности: Я работаю для Великих Миграций. Гораздо больше обсуждать. Посетите Great Migrations Documentation Portal для получения дополнительных статей и получите пробную версию gmStudio и попробуйте инструмент для повышения прочности в промышленности.