Фон
В прошлом году меня попросили создать инструмент для бизнес-планирования примерно для 10 пользователей. Это было сделано от имени другой ИТ-команды, которая «заключила со мной контракт», и из-за того, что сроки выполнения проекта были немного незапланированными с их стороны, мне пришлось немного поторопиться с этим.
В то время мы решили, что самым быстрым способом было бы создать книгу Excel с VBA, а затем попросить пользователей загрузить эту книгу с расширенными возможностями VBA из интрасети для использования на своих ПК. В этом случае Excel был ограничением, поскольку используемая нами система планирования (т. Е. База данных) может взаимодействовать только через надстройку Excel, которая должна быть загружена одновременно с открытой книгой планирования. Тем не менее, VBA не был ограничением в то время.
В рабочей книге я создал около 4000 строк кода VBA, и хотя я пытался разделить уровни данных и представления, я не смог во всех случаях из-за сроков проекта. Если честно, хотя я горжусь созданием этой книги, я в то же время немного разочарован тем, что она могла бы быть лучше, как с точки зрения кодирования, так и с точки зрения развертывания для пользователей.
сегодня
Назад к сегодняшнему дню, и ИТ-команда снова пришла ко мне, чтобы запросить аналогичную рабочую книгу (чтобы я мог повторно использовать части другой рабочей книги выше), но на этот раз она намного сложнее и будет использоваться большим числом пользователей ( около 200).
Однако на этот раз все немного лучше спланировано, и я вижу, что у нас есть немного больше времени, чтобы планировать вещи. Исходя из этого, я подумал о решении и инфраструктуре, поскольку программирование для 100 пользователей оказывает большее влияние, чем для 10 пользователей. Поэтому я предложил команде, возможно, нам рассмотреть вопрос о переносе существующего кода в решение C #, чтобы мы могли управлять кодом более изощренным способом. Я все еще рассматриваю это как надстройку, написанную с использованием VSTO / Excel-DNA, которая затем может быть развернута для пользователей.
Я обсуждал это с ИТ-командой две недели назад, и все было в порядке, до вчерашнего дня я получил письмо от одного из членов команды (который не знает VBA или C #) с вопросом, почему мы должны начать этот новый проект в C # вместо использования тот же подход, что и раньше. Некоторые из их проблем были:
- Это довольно важный проект, поэтому он должен работать - решение C # не будет таким же стабильным или работать, как существующее решение на основе VBA.
- Нам бы пришлось отказаться от того, что мы [I] сделали в решении VBA, и воссоздать его с нуля в C #.
- Кто-то должен будет поддерживать два отдельных решения, одно в VBA и одно в C #. [на самом деле, в настоящее время у них никого нет поддержки, я обычно вмешиваюсь]
Теперь я могу до некоторой степени понять некоторые из их проблем, но мне нужно принять решение о дальнейших шагах и о том, с чем можно вернуться к ним. Лично я хотел бы реализовать в C #, потому что я чувствую, что это лучше подойдет для создания решения "Enterprise", как это. Кроме того, я хотел бы воспользоваться этой возможностью, чтобы освежить свои навыки в C #, поскольку в настоящее время я не настолько компетентен в C #, как VBA, и я хотел бы, чтобы такой проект поднял меня на «следующий уровень».
Я подготовил список моментов, которые я мог бы использовать, чтобы попытаться убедить их в том, что решение C # будет лучше для этого проекта, вот что я имею до сих пор:
- Модульное тестирование.
- Управления источником.
- Документация по коду - для передачи знаний другим лицам поддержки.
- Лучшие соглашения по кодированию - можно использовать такие вещи, как ReSharper, для обеспечения лучшего именования и структуры.
- Лучшая IDE - меньше ошибок благодаря выделению ошибок.
- Больше модульности благодаря сборкам - может способствовать повторному использованию в будущих инструментах.
- Управляемое развертывание - может контролировать, кем этот инструмент используется.
Вопрос: Какие еще моменты я мог бы добавить, чтобы убедить их? Или я пытаюсь откусить больше, чем могу прожевать в этом проекте? Должен ли я просто молчать и делать это в VBA в любом случае?
Я знаю, что просто переход на новый язык, потому что он «новее» или считается «круче», не должен быть основой для решения, и поэтому я не стал включать его в качестве точки принятия решения - речь идет о фактах.
Кроме того, я не прошу буквального сравнения между C # и VBA как языками, поскольку существует множество сравнений для SO.