Hintergrund
Letztes Jahr wurde ich gebeten, ein Tool für die Unternehmensplanung für etwa 10 Benutzer zu erstellen. Dies geschah im Auftrag eines anderen IT-Teams, das die Arbeit an mich "vergeben" hatte, und da die Projektfristen auf ihrer Seite ein wenig ungeplant waren, musste ich sie schnell umsetzen.
Zu dieser Zeit entschieden wir, dass die schnellste Möglichkeit darin besteht, eine Excel-Arbeitsmappe mit VBA zu erstellen und die Benutzer dann diese VBA-erweiterte Arbeitsmappe aus einem Intranet herunterladen zu lassen, um sie auf ihren PCs zu verwenden. Excel war in diesem Fall eine Einschränkung, da das von uns verwendete Planungssystem (dh die Datenbank) nur über ein Excel-Add-In interagieren kann, das geladen werden muss, wenn die Planungsarbeitsmappe geöffnet ist. VBA war zu diesem Zeitpunkt jedoch keine Einschränkung.
In der Arbeitsmappe habe ich rund 4.000 Zeilen VBA-Code erstellt. Obwohl ich versucht habe, Daten- und Präsentationsebenen zu trennen, konnte ich dies aufgrund der Projektfristen nicht in allen Fällen tun. Um ehrlich zu sein, bin ich zwar stolz darauf, dieses Arbeitsbuch zu erstellen, gleichzeitig aber etwas enttäuscht darüber, dass es sowohl hinsichtlich der Codierung als auch der Bereitstellung für die Benutzer besser hätte durchgeführt werden können.
Heute
Zurück zu heute und das IT-Team ist wieder zu mir gekommen, um eine ähnliche Arbeitsmappe anzufordern (damit ich Teile der anderen Arbeitsmappe oben wiederverwenden kann), aber diesmal ist es viel komplizierter und wird von einer größeren Anzahl von Benutzern verwendet ( etwa 200).
Dieses Mal ist es jedoch etwas besser geplant und ich kann sehen, dass wir etwas mehr Zeit haben, um Dinge zu planen. Auf dieser Grundlage habe ich über die Lösung und Infrastruktur nachgedacht, da die Programmierung für 100 Benutzer eine größere Auswirkung hat als für 10 Benutzer. Aus diesem Grund schlug ich dem Team vor, den vorhandenen Code möglicherweise auf eine C # -Lösung zu migrieren, damit der Code genauer verwaltet werden kann. Ich betrachte es immer noch als Add-In, das mit VSTO / Excel-DNA geschrieben wurde und dann für die Benutzer bereitgestellt werden kann.
Ich habe dies vor zwei Wochen mit dem IT-Team besprochen und alles schien in Ordnung zu sein. Bis gestern erhielt ich eine E-Mail von einem Teammitglied (das weder VBA noch C # kennt), in der gefragt wurde, warum wir dieses neue Projekt in C # starten sollen, anstatt das zu verwenden Gleicher Ansatz wie zuvor. Einige ihrer Anliegen waren:
- Es ist ein ziemlich wichtiges Projekt, daher muss es funktionieren - eine C # -Lösung wäre nicht so stabil oder funktioniert nicht so gut wie die vorhandene VBA-basierte Lösung.
- Wir müssten verwerfen, was wir in der VBA-Lösung getan hatten, und es in C # von Grund auf neu erstellen.
- Jemand muss zwei separate Lösungen unterstützen, eine in VBA und eine in C #. [Eigentlich haben sie derzeit niemanden, den ich normalerweise unterstütze].
Jetzt kann ich einige ihrer Bedenken bis zu einem gewissen Grad verstehen, aber ich muss eine Entscheidung über die nächsten Schritte treffen und darüber, womit ich zu ihnen zurückkehren soll. Persönlich würde ich gerne in C # implementieren, da ich der Meinung bin, dass es sich besser eignet, eine "Enterprise" -Lösung wie diese zu erstellen. Darüber hinaus möchte ich diese Gelegenheit nutzen, um meine C # -Fähigkeiten aufzufrischen, da ich derzeit nicht so kompetent in C # bin wie VBA, und ich möchte, dass ein Projekt wie dieses mich auf die "nächste Ebene" bringt.
Ich habe eine Liste mit Punkten erstellt, mit denen ich versuchen könnte, sie davon zu überzeugen, dass eine C # -Lösung für dieses Projekt besser wäre. Das habe ich bisher:
- Unit-Test.
- Quellcodeverwaltung.
- Code-Dokumentation - zum Wissenstransfer an andere Support-Personen.
- Bessere Kodierungskonventionen - können Dinge wie ReSharper verwenden, um eine bessere Benennung und Struktur zu erzwingen.
- Bessere IDE - weniger Fehler durch Fehlerhervorhebung.
- Mehr Modularität durch Baugruppen - kann die Wiederverwendung in zukünftigen Werkzeugen fördern.
- Verwaltete Bereitstellung - kann steuern, von wem dieses Tool verwendet wird.
Frage: Welche weiteren Punkte könnte ich hinzufügen, um sie zu überzeugen? Oder versuche ich mehr abzubeißen, als ich mit diesem Projekt kauen kann? Soll ich es trotzdem in VBA machen?
Mir ist bewusst, dass der Wechsel zu einer neuen Sprache, weil sie "neuer" oder "cooler" ist, keine Grundlage für eine Entscheidung sein sollte. Ich habe mich daher geweigert, sie als Entscheidungspunkt aufzunehmen - hier geht es um Fakten.
Außerdem fordere ich keinen wörtlichen Vergleich zwischen C # und VBA als Sprachen, da es zahlreiche Vergleiche zu SO gibt.