Arka fon
Geçen yıl, yaklaşık 10 kullanıcı için iş planlaması için kullanılacak bir araç oluşturmam istendi. Bu, işi bana "alt-sözleşme yapan" başka bir BT ekibi adına yapıldı ve proje sürelerinin biraz planlanmamış olması nedeniyle biraz acele etmek zorunda kaldım.
O zaman, en hızlı yolun VBA ile bir Excel çalışma kitabı oluşturmak ve daha sonra kullanıcıların bu VBA-gelişmiş çalışma kitabını bilgisayarlarında kullanmak için bir İntranet'ten indirmelerini sağlamak olduğuna karar verdik. Excel bu durumda bir kısıtlamadır, çünkü kullandığımız planlama sistemi (yani veritabanı) yalnızca planlama çalışma kitabının açık olduğu sırada yüklenmesi gereken bir Excel eklentisi aracılığıyla etkileşime girebilir. Ancak, VBA o sırada bir kısıtlama değildi.
Yaklaşık 4.000 satır VBA kodu oluşturduğum çalışma kitabı ve veri ve sunum katmanlarını ayırmaya çalışırken, proje son tarihleri nedeniyle her durumda yapamadım. Dürüst olmak gerekirse, bu çalışma kitabını oluşturmaktan gurur duyuyorum, aynı zamanda hem kodlama hem de kullanıcılara dağıtım açısından daha iyi yapılabileceği için biraz hayal kırıklığına uğradım.
Bugün
Bugüne kadar ve BT ekibi yine benzer bir çalışma kitabı talep etmek için bana geldi (böylece yukarıdaki diğer çalışma kitabının parçalarını tekrar kullanabilirim), ancak bu sefer çok daha karmaşık ve daha fazla sayıda kullanıcı tarafından kullanılacak ( 200 civarında).
Ancak bu sefer biraz daha iyi planlanmış ve işleri planlamak için biraz daha zamanımız olduğunu görebiliyorum. Buna dayanarak, 100 kullanıcı için programlama 10 kullanıcıya göre daha fazla etkiye sahip olduğundan çözüm ve altyapıyı düşündüm. Bu nedenle, ekibe, kodu daha rafine bir şekilde yönetebilmemiz için mevcut kodu bir C # çözümüne geçirmeyi düşünmemiz gerektiğini önerdim. Ben hala kullanıcılara dağıtılabilir VSTO / Excel-DNA kullanarak yazılı bir eklenti olarak düşünüyorum.
Bunu iki hafta önce BT ekibiyle tartıştım ve dünden önce, ekipten birinden (VBA veya C # bilmeyen) bir e-postayı neden C # 'da kullanmaya başlamamız gerektiğini sorgulayan bir posta alana kadar her şey iyi görünüyordu. öncekiyle aynı yaklaşım. Onların endişelerinden bazıları:
- Oldukça önemli bir projedir, bu yüzden çalışması gerekir - bir C # çözümü, mevcut VBA tabanlı bir çözüm kadar kararlı olmayacak veya çalışmayacaktır.
- VBA çözümünde yaptığım şeyi atmam ve C # 'da sıfırdan yaratmamız gerekirdi.
- Birisi biri VBA diğeri C # olmak üzere iki ayrı çözümü desteklemelidir. [aslında, şu anda destek için kimseleri yok, genellikle içeri giriyorum].
Şimdi, bazı endişelerini bir dereceye kadar anlayabiliyorum, ancak sonraki adımlar ve onlarla ne geri dönecekleri konusunda bir karara varmam gerekiyor. Şahsen, ben C # uygulamak istiyorum çünkü böyle bir "Kurumsal" çözüm oluşturmak için daha iyi ödünç hissediyorum. Ayrıca, şu anda C # yetenekleri VBA kadar yetkin değilim ve bu tür bir projenin beni "bir sonraki seviyeye" götürmesini istiyorum C # becerilerimi fırça fırlatmak istiyorum.
Bir C # çözümünün bu proje için daha iyi olacağına ikna etmek için kullanabileceğim noktaların bir listesini hazırladım, şu ana kadar olan şey:
- Birim testi.
- Kaynak kontrolü.
- Kod belgeleri - diğer destek kişilerine bilgi aktarımı için.
- Daha iyi kodlama kuralları - daha iyi adlandırma ve yapı oluşturmak için ReSharper gibi şeyleri kullanabilir.
- Daha iyi IDE - hata vurgulama nedeniyle daha az hata.
- Montajlar yoluyla daha fazla modülerlik - gelecekteki araçlarda yeniden kullanımı teşvik edebilir.
- Yönetilen dağıtım - bu aracın kimler tarafından kullanıldığını kontrol edebilir.
Soru: Onları ikna etmek için başka hangi noktaları ekleyebilirim? Yoksa bu projeyi çiğneyebileceğimden daha fazla ısırmaya mı çalışıyorum? Yine de sessiz kalmalı mıyım ve VBA'da da yapmalı mıyım?
Sadece yeni bir dile geçmenin farkındayım çünkü onun "daha yeni" ya da "daha havalı" olduğu düşünülen bir kararın temeli olmamalı ve bu yüzden onu bir karar noktası olarak eklemeye direndim - bu gerçeklerle ilgili.
Ayrıca, SO üzerinde çok sayıda karşılaştırma olduğundan, dil olarak C # ve VBA arasında gerçek bir karşılaştırma istemiyorum.