พื้นหลัง
เมื่อปีที่แล้วฉันถูกขอให้สร้างเครื่องมือที่จะใช้สำหรับการวางแผนธุรกิจสำหรับผู้ใช้ประมาณ 10 คน สิ่งนี้ทำในนามของทีมงานไอทีอีกคนที่ "ทำสัญญาย่อย" ทำงานให้ฉันและเนื่องจากกำหนดเวลาโครงการไม่ได้วางแผนมาก่อนที่ด้านข้างของพวกเขาฉันจึงต้องดำเนินการอย่างเร่งด่วน
ในเวลานั้นเราตัดสินใจว่าวิธีที่เร็วที่สุดคือการสร้างเวิร์กบุ๊ก Excel ด้วย VBA จากนั้นให้ผู้ใช้ดาวน์โหลดเวิร์กบุ๊กที่ปรับปรุงด้วย VBA นี้จากอินทราเน็ตเพื่อใช้บนพีซีของพวกเขา Excel เป็นข้อ จำกัด ในกรณีนี้เนื่องจากระบบการวางแผน (เช่นฐานข้อมูล) ที่เราใช้สามารถโต้ตอบผ่านทาง Add-in ของ Excel เท่านั้นซึ่งจะต้องโหลดในเวลาเดียวกันเมื่อสมุดงานการวางแผนเปิดอยู่ อย่างไรก็ตาม VBA ไม่ใช่ข้อ จำกัด ในเวลานั้น
สมุดงานที่ฉันสร้างขึ้นประมาณ 4,000 บรรทัดของรหัส 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 เพื่อบังคับใช้การตั้งชื่อและโครงสร้างที่ดีขึ้น
- Better IDE - ข้อผิดพลาดน้อยลงเนื่องจากการเน้นข้อผิดพลาด
- ความเป็นโมดูลที่มากขึ้นผ่านชุดประกอบ - สามารถส่งเสริมการใช้ซ้ำในเครื่องมือในอนาคต
- การปรับใช้ที่มีการจัดการ - สามารถควบคุมได้ว่าใครเป็นผู้ใช้เครื่องมือนี้
คำถาม: ฉันสามารถเพิ่มประเด็นอื่น ๆ เพื่อโน้มน้าวพวกเขาได้อย่างไร หรือฉันพยายามกัดมากกว่าที่ฉันสามารถเคี้ยวกับโปรเจ็กต์นี้ได้? ฉันควรจะเงียบ ๆ และทำใน VBA อยู่ดี
ฉันทราบดีว่าการย้ายไปใช้ภาษาใหม่เพราะ "ใหม่กว่า" หรือเห็นว่า "เย็นกว่า" ไม่ควรเป็นพื้นฐานสำหรับการตัดสินใจและดังนั้นฉันจึงไม่เห็นด้วยที่จะรวมไว้เป็นจุดตัดสินใจ - นี่เป็นเรื่องจริง
นอกจากนี้ฉันไม่ขอเปรียบเทียบตัวอักษรระหว่าง C # และ VBA เป็นภาษาเนื่องจากมีการเปรียบเทียบมากมายใน SO