Недостатки более крупного проекта в VBA - PullRequest
4 голосов
/ 08 февраля 2011

Я новичок в проекте для компании, которая имеет более крупную корпоративную / бухгалтерскую систему на основе Visual Basic для приложений (VBA) в Ms Access 97. Это приложение все еще живо, они делают обновления и все работает относительно хорошо.Но они хотят перевести это приложение на высший уровень, ускорить разработку, сделать его более привлекательным для конечных пользователей и т. Д. Но я не уверен, что будет хорошей идеей продолжить разработку с использованием этой технологии (VBA).и поэтому у меня есть несколько вопросов.Я был бы очень рад, если бы вы могли мне помочь.

  1. VBA предназначена для больших проектов?Я думаю, что это скорее для макросов и просто функций, которые расширяют функциональность Access.
  2. Будет ли лучше конвертировать приложение в .NET winforms / wpf
  3. Может ли больше разработчиков работать над проектом VBA?
  4. Какие наихудшие недостатки кода VBA, выполняемого в хостинговой программе, по сравнению с автономным приложением?
  5. Можно ли запускать модульные тесты или любую другую подобную технологию?

Большое спасибо за любой ответ

РЕДАКТИРОВАТЬ: интерфейс доступа теперь использует почти против SQL Server,но это не меняет основных проблем.

Ответы [ 7 ]

7 голосов
/ 08 февраля 2011

Это очень субъективно. VBA имеет плохую репутацию, но это только потому, что он был разработан, чтобы быть очень доступным языком сценариев для программистов, у которых не было большого опыта. Абсолютная ирония использования такого языка для проекта big заключается в том, что требуется очень опытный программист, чтобы не дать ему выйти из-под контроля. Как кто-то, кто понимает, что нужно делать с самого начала, когда язык не поддерживает пространства имен, вам лучше с самого начала придумать очень хорошее соглашение об именах.

Я могу догадаться, почему вы задаете этот вопрос. И ответ заключается в том, что очень трудно отбросить годы работы только потому, что язык не привлекателен. Основным моментом для этого является Netscape версии 6.0, хорошо покрытый "T Hings, которые вы никогда не должны делать ".

Лучшее лекарство от выяснения того, что вы работаете на работодателя, у которого есть продукты коричневого цвета, - это найти другое.

4 голосов
/ 21 февраля 2011

Здесь нет реальных ответов от тех, кто демонстрирует большой опыт работы с Access, поэтому я дам свой ответ:

1. VBA даже предназначен для больших проектов?

Определите «большие проекты».В целом, я бы сказал, нет, но я думаю о приложениях для всего предприятия.Но вопрос здесь не в том, можно ли использовать VBA, а в том, является ли Access подходящим интерфейсом для приложений такого уровня.Самым большим недостатком Access (помимо проблем с развертыванием форм) является управление проектом, поскольку управление исходными кодами не так просто, как с другими платформами разработки.

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

Я думаю, что это более вероятно для макросов и просто функций, которые расширяют функциональность Access.

Как я уже сказал, вы задаете не тот вопрос.Вопрос в том, является ли Access подходящим интерфейсом.Если это так, то VBA - это язык, на котором вы должны писать его.

Что касается «макросов и простых функций», то существует терминологическая проблема в том, что Word и Excel «макросы» генерируются в VBA, что делает многолюди думают, что VBA - это простой язык.На самом деле VBA является СУПЕРСЕТОМ VB6 (не подмножеством) - в VBA встроено БОЛЬШЕ функциональных возможностей, чем в самом VB6.В Access большая часть этой функциональности специфична для взаимодействия с базами данных, и поэтому очень полезна (например, сравните форму, связанную с Access, с формой VB).

В общем, философия Accessэто тот, в котором вы начинаете строить объекты в интерактивном режиме, наводите и нажимаете, а затем добавляете код только тогда, когда поведения по умолчанию недостаточно.VBA обеспечивает большую гибкость, поскольку он может взаимодействовать с любыми инструментами, имеющими интерфейс COM.По сути, он неограничен в своих возможностях (хотя, конечно, есть предел тому, что практично).

2 Будет лучше конвертировать приложение в .NET winforms / wpf

«Лучше» для каких целей?Если у вас есть работающее приложение, вам действительно нужно учитывать эффект Spolsky / Netscape (упомянуто выше).Конечно, вы могли бы получить лучшее управление кодом, но за счет необходимости поддерживать его гораздо больше.С другой стороны, если у вас есть собственный опыт работы с этой платформой разработки и нет опыта работы с VBA, то будет существовать тенденция к переходу на платформу разработки, которая больше подходит для ваших конкретных разработчиков.

Но это не совсем так.проблема «лучше», которая не может быть решена без знания всех проблем и вовлеченного персонала.

3 Может ли больше разработчиков работать над проектом VBA?

Visual SourceSafe позволяет нескольким разработчикам работать над проектом.Или вы можете автоматизировать сборку с помощью Application.SaveAsText / .LoadFromText и использовать выбранный вами CVS.

Но в целом я бы сказал, что Access гораздо лучше подходит для модели с одним разработчиком.

4 Какие наихудшие недостатки кода VBA, выполняемого в хостинговой программе по сравнению с автономным приложением?

Понятия не имею, что означает этот вопрос.У многих людей есть сумасшедшая идея, что рабочий набор для внешнего интерфейса Access больше, чем рабочий набор для приложения VB6, делающего то же самое, но на самом деле это не так.Я ожидаю, что .NET примерно такой же (если не еще больший рабочий набор, так как вещи всегда становятся все больше и больше по мере продвижения вперед).

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

5 Возможно ли запускать юнит-тесты или какую-либо подобную технологию?

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

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

3 голосов
/ 08 февраля 2011
  1. Теоретически нет - он был разработан в основном для приложений с небольшим количеством пользователей. Ваш пример показывает, что его можно использовать в более крупных проектах.
  2. Полученная система (при правильном преобразовании) будет лучшего качества. Но, как всегда в бизнесе, вы должны учитывать стоимость конверсии.
  3. Да, могут, но это сложнее, так как не так много систем контроля версий, совместимых с модулями доступа (Beyond Compare должен работать, на расстоянии)
  4. Производительность, масштабируемость и т. Д. Я не могу думать о преимуществах, просто VBA не очень подходит для больших систем (представьте, что вы хотели бы иметь некоторые веб-отчеты или другие функциональные возможности, которые очень сложны в Access)
  5. Это возможно, но полностью вручную

Как и во всех технологиях, практически все возможно с помощью Access - но вы должны учитывать стоимость обслуживания таких систем. Это не вопрос, ЕСЛИ вы будете обращать, но КОГДА вам придется.

2 голосов
/ 08 февраля 2011

Возможно, вам сначала нужно задать компании несколько вопросов:

  • , почему проект не был перенесен на более новые версии?Оставаться с одной версией подразумевает желание убить проект в долгосрочной перспективе.Если не стоит идти в ногу с текущими версиями, вероятно, также не хватило ресурсов для правильной поддержки приложения.Это, скорее всего, убьет траекторию миграции.Недостаток технического обслуживания в течение 10 лет обходится дорого.
  • Создание большой системы в VBA было плохой идеей 10 лет назад, как и сейчас.Почему вы должны верить, что руководство будет принимать более правильные решения сейчас?
  • правильный способ справиться с этим видом наследства - это обеспечить, чтобы сопровождающие достигли пенсионного возраста всего через несколько месяцев после прекращения использования программного обеспечения.Когда руководство ожидает, что это произойдет?Поиск квалифицированных людей будет становиться все труднее, чем более устаревшей становится технология.
  • Миграция таких систем может быть ужасно дорогой.Насколько руководство готово сделать инвестиции сейчас, когда они не были готовы раньше?Вам нужно придумать стратегию, в которой вы можете делать очень маленькие шаги и уже использовать недавно написанное программное обеспечение.Не используйте обычный .net / winforms / wpf.Удостоверьтесь, что вы потратили некоторое время на поиск хотя бы структуры уровня приложения.Совершенно другой подход заключается в использовании таких инструментов, как MOOSE , для реинжиниринга решения.
0 голосов
/ 08 февраля 2011
  1. Нет. Это Visual Basic for Applications, и это именно то, что обеспечивает интерфейс для COM-объектов и макросов.

  2. Я бы начал переходить к WPF, так как это будет более вероятным подтверждением двух вариантов в будущем, но если ваши зависшие машины поддержки еще не используют XP Sp2, вам нужно будет использовать WinForms (хотя я очень сомневаюсь в этом сценарии) ). VB.Net может быть хорошей отправной точкой для всех полезных додад в пространстве имен Microsoft.VisualBasic.

  3. Да, начните разбивать решение на отдельные файлы .vba и .mod и внедрите контроль источников. Однако к этому моменту вы должны рассмотреть возможность перехода ваших разработчиков на VB.Net или C #.

  4. VBA в значительной степени зависает от однопоточного исполнения. В Visual Studio Tools for Office при использовании вместе с VB.Net и C # отсутствует функциональность, предоставляемая непосредственно с помощью VBA.

  5. Вроде. См. VBAUnit .

Следует иметь в виду, что в 2008 году VB6 закончил свою жизнь, а VBA все еще включена в Office 2010, но рекомендуется, чтобы разработчики использовали VSTA. Администраторы использовали пакетные файлы и сценарии VBA, но Powershell медленно, но верно заменяет этот тип реализации. В принципе, VBA все еще будет работать, но есть более новые (и, вероятно, лучшие) способы ведения дел (которые скоро не достигнут конца жизни).

0 голосов
/ 08 февраля 2011
  1. Почти все получили ужасную историю VBA, где приложение access или Excel работало в крупномасштабных средах, но, как говорит ufoq, в какой-то момент вам придется переключиться.Это - обязательно VBA, который вызывает проблему, или двигатель Jet, на котором работает Access?Графический интерфейс доступа может использоваться в крупномасштабных приложениях с бэкэндом SQL-сервера.

2. Наиболее вероятно, хотя это, очевидно, зависит от квалификации разработчика.будет проблемой, так как все будут работать над одним файлом.Так что да,> NET-разработка, поддерживаемая контролем версий, была бы лучше для большего числа разработчиков

4 и 5. Смотрите ответы ufoq

0 голосов
/ 08 февраля 2011

Ну, в VBA можно найти приложения в соответствии с их популярностью в конце 90-х годов. Благодаря новой MS Frameworks, .Net позволяет вам конвертировать ваш код из VBA в VB.Net, если вы хотите.

Вы правы, когда говорите, что VB можно использовать сегодня в макросах для Excel, но для большого проекта VBA может быть ограничен, если вы хотите взаимодействовать с веб-службами и всеми новыми функциями, которые вы можете в .Net.

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

С преобразованным проектом многие разработчики могут работать с ним, причем не только с использованием VB.net, но и с другими языками .Net Framework. На данный момент в обновленный проект могут быть добавлены веб-службы, NHiberante как постоянный API, NUnit как модульные тесты (как и многие другие функции).

Вот ссылка с информацией MSDN о конвертации. http://msdn.microsoft.com/en-us/library/aa192490(v=office.11).aspx

...