ฉันมีบ่ายวันหนึ่งเพื่อยกย่องผลประโยชน์ของ. NET ผ่าน VB6 …ฉันจะพูดอะไรดี [ปิด]


9

บริษัท ของฉันเป็น บริษัท วิศวกรรมขนาดเล็กยี่สิบคน การเขียนโปรแกรมแอปพลิเคชันทั้งหมดที่นี่ทำใน VB6 โดยคนสองคนที่สอนตัวเอง VB6 จากพื้นหลังการประกอบในขณะที่ทำงานที่นี่มากกว่า 25 ปีที่ผ่านมาและตัวฉันเอง

ด้วยเหตุนี้โค้ด VB6 จึงเต็มไปด้วยกลิ่นโค้ดที่น่ากลัวเช่นตัวแปรที่พิมพ์จำนวนมากฟังก์ชันที่ยาวมากตัวแปรสาธารณะทั่วโลกหลายร้อยตัวแปร ชั้น การปรับโครงสร้างใหม่นั้นเป็นไปไม่ได้และการเปลี่ยนแปลงใด ๆ จำเป็นต้องมีการขุดผ่านโค้ดมากเกินไปและเมื่อทำครั้งเดียว

เจ้านายของฉันรู้ว่า VB6 เป็นเทคโนโลยีที่ตายแล้วและยินดีที่จะรับฟังคำอ้อนวอนของฉันที่จะย้ายไป. NET เพื่อการพัฒนาใหม่ เรากำลังก้าวไปข้างหน้าเพื่อ. NET แต่เขาเห็นว่ามันเป็นวิธีในการติดตามความเข้ากันได้กับระบบปฏิบัติการ Windows รุ่นใหม่ไม่ได้เป็นวิธีการเขียนรหัสที่ดีกว่า

ฉันจะอธิบายประโยชน์ของภาษา. NET ผ่าน VB6 ได้ดีที่สุดเกินกว่าจะเป็นปัจจุบันได้อย่างไร สิ่งที่ฉันสามารถพูดได้ดีที่สุดเน้นว่าย้ายไป. NET เป็นย้ายที่ดีแต่ก็หมายความว่ากระบวนทัศน์การเขียนโปรแกรมปัจจุบันของเราควรเริ่มเปลี่ยน ทันทีที่เจ้านายของฉันได้ยินว่า Visual Basic .NET ดูเหมือน VB6 ฉันรู้ว่าสัญชาตญาณแรกของเขาคือการแปลงระเบียบรหัสเก่าของเราเป็น. NET

ผมเข้าใจว่ามันจะเป็นไปไม่ได้ที่จะคิดเปลี่ยนแปลงของทุกคนในช่วงบ่ายวันเดียว แต่วิธีการที่ฉันสามารถอย่างน้อยโน้มน้าวให้เจ้านายประกอบลูกหาบของฉันว่าสิ่งที่ชอบตัวแปรขอพิมพ์ชั้นเรียนที่กำหนดเองและสาขาส่วนตัวไม่ได้เป็นทั้งหมดเสียเวลา และพลังงาน


4
นักพัฒนา VB6 เป็นสายพันธุ์ที่กำลังจะตาย? ลองทำการสรรหานักพัฒนา. NET และนักพัฒนา VB6 ดูจำนวน CV ที่คุณได้รับสำหรับแต่ละรายการ ความจริงที่ว่าเมื่อตัวจับเวลาเก่า 2 ตัวเกษียณแล้วจะไม่มีการแทนที่ (หรือการทดแทนที่มีราคาแพงมาก) น่าจะเพียงพอสำหรับการโต้แย้ง
Oded

3
ฉันซาบซึ้งที่เขาอาจจะพยายามแต่นักพัฒนาที่เคารพตนเองส่วนใหญ่จะใช้ภาษาที่ตายแล้ว ไม่แน่ใจว่าเมื่อใด MS จะหยุดการสนับสนุน VB6 แต่การหาทรัพยากรเพิ่มขึ้นยากขึ้นเรื่อย ๆ (และจุดสิ้นสุดของผลิตภัณฑ์เป็นข้อโต้แย้งต่อ VB6) ไม่แน่ใจว่าสิ่งนี้จะช่วยได้มากเพียงใด แต่ทำการศึกษา: msdn.microsoft.com/en-us/vstudio/ms788708.aspx - 2008 เป็นจุดสิ้นสุดของ IDE และฉันชอบ "ข้อตกลงการสนับสนุนที่กำหนดเองอาจมีให้จาก Microsoft" - ฉันจะสงสัยว่าค่าธรรมเนียมเท่าไร ...
Oded

1
@Oded น่าเสียดายที่ไม่มีข้อโต้แย้งใด ๆ ที่สัมผัสกับความจริงที่ว่า VB.NET นั้นสามารถใช้งานได้ในฐานะ VB6, ตัวแปรสาธารณะทั่วโลกและทั้งหมด เมื่อเราใช้. NETแล้วเราจะใช้ประโยชน์ทั้งหมดนี้อย่างไร?
dlras2

1
อาจอธิบายด้วยตัวอย่าง มีปัญหาบางอย่างที่แก้ได้ยากใน VB6 ที่จะแก้ได้ง่ายกว่าใน VB .NET หรือไม่ คุณสามารถเลือกตัวอย่างจากฐานรหัสของคุณและแสดงให้เห็นว่าพวกเขาสามารถล้างข้อมูลให้เป็นรหัสที่ดีขึ้นใน. NET ที่ไม่สามารถใช้กับคุณสมบัติใน VB6 ได้หรือไม่?
FrustratedWithFormsDesigner

1
@DanRasmussen VB.NET ไม่สามารถนำเข้าโครงการ VB6 ได้อย่างถูกต้อง (แก้ไขแล้วหรือยัง) มันไม่สำคัญที่จะอัพเกรด

คำตอบ:


16

คำตอบสั้น:มีอะไรที่คุณสามารถทำได้เพื่อเปลี่ยนจิตใจของพวกเขาขึ้นอยู่กับเกณฑ์ที่คุณระบุไว้ในคำถามซึ่งทั้งหมดเป็นทางด้านเทคนิค นี่คือเทียบเท่าการอภิปรายทางศาสนา เส้นทางที่เร็วที่สุดสู่ความล้มเหลวคือการนำเสนออาร์กิวเมนต์ที่ไม่ได้มาจากมุมมองของผู้ชมในกรณีนี้เจ้าของธุรกิจ

คำตอบอีกต่อไป: การเปลี่ยนแปลงในธุรกิจขับเคลื่อนด้วยสิ่งหนึ่งและสิ่งเดียวเท่านั้น กำไรให้กับกำไร

... อย่างน้อยฉันจะโน้มน้าวให้หัวหน้าของเขาประกอบสิ่งต่าง ๆ เช่นตัวแปรที่พิมพ์อย่างรุนแรงคลาสที่กำหนดเองและเขตข้อมูลส่วนตัวไม่ใช่การเสียเวลาและพลังงานทั้งหมด?

พวกเขาไม่เพียง แต่จะเสียเวลาและพลังงาน แต่ที่สำคัญกว่านั้นคือคุณต้องเสียเงิน ! คุณจะต้องสามารถแสดงปริมาณที่แนะนำว่าคำแนะนำของคุณจะนำไปสู่ผลกำไรอย่างมากในช่วงเวลา เพียงแค่อ้างว่ารหัสสะอาดคือ"ดีกว่า"ไม่เพียงพอเพราะรหัสสะอาดต้องใช้วิธีการผลิตมากกว่า

หากคุณสามารถระบุได้ว่าค่าใช้จ่ายของการใช้เทคโนโลยีที่ทันสมัยจะนำไปสู่($COST + X) * TIME = $PROFITที่ไหนซึ่งXเป็นจำนวนpostive ที่ไม่น่ารำคาญและTIMEค่อนข้างสั้นคุณสามารถสร้างสถานการณ์ที่น่าสนใจ

อีกวิธีในการคำนวณ ROI (ผลตอบแทนจากการลงทุน)

สูตร ROI

หากROI / RORนี้เป็นจำนวนเล็กน้อยโดยเฉพาะอย่างยิ่งในช่วงเวลาที่ยาวนานคุณไม่ได้มีกรณีธุรกิจมากมาย

บริษัท ของคุณสร้างรายได้อย่างไร?

มีโค้ดกี่บรรทัด? ลูกค้ากี่คน? ซอฟต์แวร์นี้ผลิตรายได้เท่าใดต่อปี รายได้ส่วนใหญ่เป็นสัญญาการสนับสนุน? หรือใบอนุญาตใหม่ ตลาดเป้าหมายมีเสถียรภาพหรือไม่ ขยาย? ทำสัญญา? ซอฟต์แวร์เป็นผู้นำด้านการสูญเสียผลิตภัณฑ์ที่ทำกำไรได้มากกว่ากันหรือไม่?

มันเป็นเรื่องยากสำหรับนักธุรกิจที่ดีที่จะไม่สนใจเงินที่วางอยู่บนโต๊ะ

แน่นอนคุณต้องสำรองข้อมูลของคุณด้วยข้อเท็จจริงที่ยากลำบาก ซึ่งหมายความว่าคุณต้องสามารถให้หมายเลขจริงที่แสดงให้คุณเข้าใจธุรกิจจริง ๆ ไม่ใช่เพียงแค่รายละเอียดทางวิชาการเท่านั้น

ไม่ใช่แค่ข้อดี

นอกจากนี้ยังให้การวิเคราะห์ความเสี่ยงโดยละเอียดและความเสี่ยงเหล่านี้$COSTหากเกิดขึ้นจะไปในทางที่ทำให้พวกเขาเชื่อว่าคุณมีกรณีที่เป็นจริงและไม่เพียงแค่บ่นว่าคุณไม่ต้องการทำ VB6 อีกต่อไป

สอนเทคนิคการเลี้ยงสุนัขตัวใหม่

... ฉันจะพูดยังไงดีที่สุดที่เน้นว่าการย้ายไป. NET เป็นการย้ายที่ดีถ้าหากกระบวนทัศน์การเขียนโปรแกรมปัจจุบันของเราเริ่มเปลี่ยนไปเช่นกัน ...

การเปลี่ยนหรือไม่เปลี่ยนกระบวนทัศน์การเขียนโปรแกรมให้เป็นไปในทางที่เป็นไปได้ของเทคโนโลยีใหม่เป็นส่วนหนึ่งของการวิเคราะห์ความเสี่ยง แต่นี้เป็นข้อโต้แย้งที่แยกต่างหากเฉพาะหลังจากที่คุณได้พิสูจน์แล้วว่ามีนัยสำคัญเงินที่จะทำโดยการเปลี่ยนแปลงในสถานที่แรก

นักธุรกิจมักจะฟังกรณีธุรกิจเช่นเดียวกับคนทางเทคนิคมักจะฟังกรณีทางเทคนิค ทุกกรณีของคุณในคำถามของคุณคือการสร้างแรงจูงใจทางเทคนิคที่ดีที่สุดในสถานการณ์ของคุณ

คาดการณ์

ฉันกำลังสร้างสมมุติฐานบางอย่างที่นี่แอป VB6, ร้านค้าเล็ก ๆ , นักพัฒนาน้อย, 2 นักพัฒนา / เจ้าของธุรกิจเก่าชี้ไปที่แอพตลาดเฉพาะที่อาจเป็นผู้ใหญ่ (เป็นที่รู้จักและรู้จักข้อบกพร่อง) ค่อนข้างสมบูรณ์สมบูรณ์ ของ"ระเบียบ"ฐานรหัสคือ สิ่งนี้ทำให้ฉันเชื่อว่าฐานผู้ใช้ขนาดเล็กไม่เพิ่มขึ้นอย่างมากทุกปีซึ่งทำให้ฉันได้ข้อสรุปดังต่อไปนี้

ว่าจะไม่มีเหตุผลทางธุรกิจที่น่าสนใจจริง ๆ ที่จะเปลี่ยนทิศทางทางเทคนิคด้วยแอปพลิเคชันนี้ และการย้ายพอร์ตไปยัง VB.Net ก็เป็นการเสียเวลาเช่นกันเพราะคุณจะมีความยุ่งเหยิงแต่ตอนนี้มีมากกว่านั้นและ 2/3 ของทีมพัฒนาไม่ทุ่มเทเพื่อเรียนรู้สิ่งใหม่ โชคดี.


2
น่าเสียดายที่ค่าใช้จ่ายของการเขียนใหม่ (รวมถึงการฝึกอบรมและการเพิ่มความเชี่ยวชาญ) มักจะมีค่ามากกว่าค่าใช้จ่ายในการทำให้แอปทำงานอย่างน้อยในระยะสั้นและระยะกลาง อย่างไรก็ตามในระยะยาวคุณมีความเสี่ยงที่การเขียนซ้ำของคุณเองอาจต้องเขียนใหม่ด้วย $ next_new_technology
gbjbaanb

4
+1 การอภิปรายทางศาสนา ถ้า OP ต้องการทำงานใน. NET เขาควรหางานทำในร้าน NET ฉันว่าการย้ายจาก VB6 เป็น. NET ใน บริษัท นี้เป็นความเสี่ยงที่สำคัญพร้อมผลประโยชน์ที่น่าสงสัย
Kirk Broadhurst

คำตอบที่ยอดเยี่ยมยกเว้นคุณจะอ่านส่วนของเขาเกี่ยวกับ "การสร้างใหม่เป็นไปไม่ได้และการเปลี่ยนแปลงใด ๆ นั้นต้องใช้การขุดผ่านรหัสมากเกินไปและเมื่อทำแล้ว มันเป็นคำสั่งสุดท้ายที่มีค่าต่อธุรกิจ แสดงให้เห็นว่าพวกเขาไม่สามารถเปลี่ยน codebase ได้โดยไม่ต้องเสียค่าใช้จ่ายเป็นจำนวนมากซึ่งเป็นข้อโต้แย้งที่ถูกต้องตามคำตอบของคุณ แน่นอนว่าต้องมีตัวชี้วัดเพื่อสำรองข้อมูลคำสั่งนั้น

@ GlenH7 เป็นการส่วนตัวฉันคิดว่าสิ่งที่คุณอ้างถึงเป็นความเห็นส่วนตัวและวาทศิลป์เพราะ OP ไม่ได้แสดงความกังวลใด ๆ นอกเหนือจากการผลักดันความคิดเห็นและวาระส่วนตัวของพวกเขา คำตอบของฉันคือเสนอว่าพวกเขาไม่ได้พิจารณาว่าตัวขับเคลื่อนที่แท้จริงสำหรับการเปลี่ยนแปลงจะเป็นเช่นไรและไม่ใช่สิ่งที่พวกเขาคิดหรือพิจารณา ประเด็นของฉันคือการเปลี่ยนแปลงที่เพิ่มขึ้นในระยะยาวที่"แพง"มักจะถูกกว่าสิ่งที่พวกเขาเสนอในระยะเวลาเท่ากัน ทำสิ่งที่พวกเขาพูดและสิ่งที่คุณอ้างถึงข้อโต้แย้งทางธุรกิจที่ไม่สามารถป้องกันได้

ตกลงกันว่ามีระดับของวาทศาสตร์ในงบ ร้านค้าบางแห่ง (และไม่ใช่ไม่ใช่ร้านเล็ก) ติดตามความล้มเหลว / การหลบหนีดังนั้นจึงเป็นไปได้ที่จะสร้างตัวชี้วัดที่ยากเกี่ยวกับข้อบกพร่อง OTOH ร้านค้าส่วนใหญ่ไม่เก็บข้อมูลนั้นและไม่มีอะไรมากไปกว่า "ความรู้สึก" ที่ไม่นับรวมในการนำเสนอทางธุรกิจ

11

ฉันมีลูกค้าที่มีผลิตภัณฑ์เรือธงเขียนใน VB6 และดูแลโดย 3 คน ฉันมาเพื่อช่วยพวกเขาเพราะพวกเขามีพันธมิตรที่ต้องการให้พวกเขาเรียกบริการเว็บ มันยากมากที่จะทำจาก VB6 แต่ง่ายจาก VB.NET หรือ C # และฉันเขียนชุดประกอบ. NET ที่ดูเหมือนกับ VB6 เหมือนองค์ประกอบ COM เพื่อให้พวกเขาสามารถเรียกมันได้ จากนั้นพวกเขาจำเป็นต้องเสนอบริการเว็บแก่ใครบางคน จากนั้นพวกเขาต้องการเขียนโปรแกรมอรรถประโยชน์แบบสแตนด์อโลนเพียงเล็กน้อยและมันจำเป็นต้องเข้ารหัสและถอดรหัสข้อมูลบางส่วนและแยกวิเคราะห์ XML บางส่วน ฉันสอนพวกเขาให้เขียนสิ่งนั้นใน. NET ในช่วง 5 ปีที่ผ่านมารหัสของพวกเขาจำนวนมากขึ้นเรื่อย ๆ อยู่ใน. NET แม้ว่าผลิตภัณฑ์เรือธงจะไม่หดตัวลงเลย มีบางส่วนที่มันเกลียด - แอพทุกตัวมี - และที่ที่พวกเขาสามารถดึงส่วนเหล่านี้ออกมาได้ (ตอนนี้การหดตัวเริ่มต้น) และนำพวกเขาไปสู่บริการหรือยูทิลิตี้แยก ส่วนที่เหลือจะถูกแปลงเป็น holus-bolus เป็น. NET ใช่ชื่อตัวแปรที่ไม่ดีและทั้งหมด - ในใจของฉันมีประโยชน์มากมายที่จะย้ายไป. NET แม้ว่าพวกเขาจะไม่เปลี่ยนกระบวนทัศน์การเขียนโปรแกรมปัจจุบันของพวกเขา เหล่านี้รวมถึง:

  • คุณสามารถใช้ Visual Studio ล่าสุดด้วยการค้นหาที่ดีกว่า Intellisense ที่ดีขึ้นการสร้างที่เร็วขึ้น ฯลฯ
  • คุณสามารถทำงานร่วมกับระบบควบคุมแหล่งสัญญาณที่เหมาะสม (เช่นไม่ใช่ VSS)
  • มีห้องสมุดที่มาพร้อมกับ. NET ที่ให้บริการฟรีเช่นการเข้ารหัส, การแยกวิเคราะห์ XML, การประมวลผลภาพและอื่น ๆ
  • การทำให้เป็นสากลและการโลคัลไลซ์เป็นเรื่องง่ายกว่าในโครงการ. NET (ด้วยการสอบถามจากลูกค้าชาวแคนาดารายใหญ่ที่ต้องการทั้งภาษาฝรั่งเศสและภาษาอังกฤษอาจทำให้ยอดเงินของลูกค้าลดลง)
  • ไลบรารี่ควบคุมราคาไม่แพง (Telerik, Infragistics, ComponentOne และอื่น ๆ ) ให้ความสามารถที่ยอดเยี่ยมสำหรับเกือบไม่มีค่าใช้จ่าย
  • มันจะง่ายกว่ามากที่จะได้รับความช่วยเหลือชั่วคราวเช่นนักเรียนภาคฤดูร้อนในสถานการณ์ที่เวลาที่ใช้ในการสอนพวกเขา VB6 นั้นไม่คุ้มค่า (อย่าพูดถึงความรู้สึกของคุณเกี่ยวกับการสอนเรื่องการจ้างเต็มเวลาใหม่)
  • แอปพลิเคชันของคุณจะรับรู้ UAC ดังนั้นมันจะทำงานได้ดีขึ้นใน Vista, 7 และ 8 มันไม่จำเป็นต้องทำงานในโหมดความเข้ากันได้ของ XP

มีมากขึ้น แต่แน่นอนว่าเพียงพอหรือไม่

เรื่องของกระบวนทัศน์การเขียนโปรแกรมการพิมพ์ที่รัดกุมคอมไพเลอร์คือเพื่อนของคุณการห่อหุ้มคือเพื่อนของคุณและอื่น ๆ คือในใจของฉัน (และฉันได้รับเงินเพื่อให้มีความคิดเห็นเหล่านี้) แยกจากกันโดยสิ้นเชิง หากคุณต้องการตายบนเนินเขาไปข้างหน้า แต่คุณจะตายด้วยสำเนา VB6 ที่เปิดอยู่


ย่อหน้าปิดของคุณหมายถึงอะไร
dlras2

6
"การย้ายไปยัง. NET" และ "ให้โปรแกรมทั้งหมดเป็นวิธีที่แตกต่างกัน" นั้นแตกต่างกันและถ้าคุณเลือกที่จะต่อสู้อันดับที่สองไม่เพียง แต่คุณไม่ประสบความสำเร็จเท่านั้นคุณแทบจะไม่ย้ายพวกเขาไป NET ด้วยวิธีการนั้น ฉันหมายความว่าฉันเห็นด้วยว่าพวกเขาควรเขียนโปรแกรมด้วยวิธีอื่น แต่เส้นทางที่ดีที่สุดในการ. NET คือ "เหมือนสิ่งที่คุณมีอยู่ตอนนี้ แต่ด้วยซอสช็อคโกแลตและโรย!"
Kate Gregory

ฉันเข้าใจถึงประโยชน์ในการเข้าถึงพวกเขาเป็นปัญหาที่แตกต่างกัน แต่ปัญหาก็คือการเข้าใกล้พวกเขาเป็นปัญหาแยกกันทำให้มั่นใจได้ว่าโปรแกรมต่างๆ
dlras2

1
คุณจะมีแอปพลิเคชั่นที่ดีขึ้น (การควบคุมที่ดีกว่าฟังก์ชันการทำงานที่มากขึ้น) และกระบวนการที่ดีกว่า (แอบในการควบคุมแหล่งและอาจติดตามการทำงานของรายการ) พร้อมกับนักพัฒนาที่ตอนนี้เห็นว่ามันสามารถทำได้แตกต่างกัน เพราะประโยชน์ที่ยอดเยี่ยมเหล่านี้ พวกเขาจะเปิดกว้างต่อสิ่งที่คุณขอจากพวกเขาต่อไป และ "unmaintainable" ไม่ใช่ไบนารี รหัสจะไม่ดี แต่สถานการณ์จะยังคงดีกว่าเดิม คุณจะได้รับการพิสูจน์ความน่าเชื่อถือด้วย
Kate Gregory

8

ฉันเริ่มต้นด้วยโครงการ VB6 เมื่อไม่กี่ปีที่ผ่านมา (ระบบ ERP ที่กำหนดเองของ บริษัท ) และฉันได้ทำการโยกย้ายไปยัง. NET อย่างช้าๆ มันอยู่ที่ไหนสักแห่งรอบครึ่งทำ

ก่อนอื่นการแปลงจาก VB6 เป็น VB.Net นั้นเป็นแนวคิดที่ไม่ดีอยู่เสมอ (และฉันได้ทำการค้นคว้ามากมายเกี่ยวกับเรื่องนั้น) มีความแตกต่างกันมากเกินไป นอกจากนี้หากเจ้านายของคุณคิดว่า VB.Net นั้น "เหมือนกับ VB6" ดังนั้นเขาจึงเข้าใจผิดอย่างสมบูรณ์และคุณต้องเปลี่ยนมุมมองของเขาอย่างรวดเร็ว

กลยุทธ์ของฉันคือให้แยกรหัสฐานสองชุดออกจากกันแล้วค่อยย้ายโมดูลทั้งหมดจาก VB6 ไปเป็น. NET แต่เมื่อมีการเปลี่ยนแปลงที่สำคัญเกิดขึ้นกับโมดูลนั้นดังนั้นเราจึงสามารถตัดค่าใช้จ่ายบางส่วนได้ อย่างไรก็ตามการเขียนใหม่เป็นงานที่มีราคาแพงและเสี่ยงมาก

มีสองวิธีในการรวม VB6 ที่มีอยู่กับรหัส. NET ใหม่ (และคุณอาจจะทำเช่นนั้นเป็นเวลานานมากดังนั้นคุณควรทำความคุ้นเคยกับแนวคิดนี้ดีกว่า) วิธีแรกที่ฉันทำคือเริ่มเขียนโมดูลขนาดเล็กใน. NET จากนั้นให้แอปพลิเคชั่น VB6 หลักเปิดใช้งาน. NET executable ที่ผ่านในพารามิเตอร์บรรทัดคำสั่งบางตัว สิ่งนี้ใช้งานได้ แต่ได้รับการเตือนว่า. NET มีเวลาในการเริ่มต้นที่ 4 ถึง 10 วินาทีดังนั้นคุณจึง จำกัด ในสิ่งที่คุณสามารถทำได้

เมื่อเริ่มเจ็บปวดจริงๆฉันพลิกกลยุทธ์และใช้วิธีการจากบทความ CodeProject นี้เพื่อแสดงรูปแบบ VB6 ที่มีอยู่ในแอปพลิเคชัน. NET หลักของฉัน เมื่อฉันไปตามเส้นทางนี้ฉันสามารถใช้เวลาเริ่มต้น. NET เพียงครั้งเดียวและใช้ ClickOnce สำหรับการปรับใช้ซึ่งเป็นสวรรค์เมื่อเทียบกับวิธีการปรับใช้แอป VB6 ก่อนหน้านี้

ที่กล่าวว่านี่คือข้อดีที่ฉันพบใน. NET ผ่าน VB6:

  • กรอบการคงอยู่ที่ดีขึ้น (NHibernate, EntityFramework, Linq2Sql ฯลฯ )
  • LINQ (ฉันไม่สามารถความเครียดได้มากพอความสำคัญ)
  • Generics!
  • ไวยากรณ์ของแลมบ์ดา (แก้ปัญหาทั้งหมดเช่น "รูที่อยู่ตรงกลาง" อย่างหรูหรา)
  • ในทำนองเดียวกันActionและFuncประเภท
  • การสะท้อนกลับ (สิ่งที่คุณไม่ค่อยได้ใช้ แต่เมื่อคุณทำมันมาก)
  • การสนับสนุนการทดสอบหน่วยที่ดีขึ้นมาก (แน่นอนฉันสงสัยว่าคุณจะโน้มน้าวให้พนักงานคนอื่น ๆ ของคุณทดสอบหน่วย แต่คุณควร)
  • ReSharper (และเครื่องมือการเปลี่ยนสถานะ / การทำโปรไฟล์อื่น ๆ ) (ดีกว่าเครื่องมือ MZ-10x)
  • ClickOnce และ / หรือ Setup / Installer Projects
  • โครงการบริการของ Windows
  • การสนับสนุนเชิงวัตถุจริง (VB6 ขึ้นอยู่กับ COM และแย่มากในแผนกนี้)
  • การพิมพ์แบบคงที่
  • อบในการสนับสนุน XML
  • WPF และ Windows Forms (การควบคุมของ VB6 มีข้อ จำกัด มาก)
  • WCF
  • โค้ดตัวอย่างอีกมากมายออนไลน์
  • ข้อยกเว้น (การจัดการข้อผิดพลาดของ VB6 นั้นแย่มากโดยการเปรียบเทียบ)
  • การรวมแหล่งควบคุมของ Visual Studio
  • Decimal ประเภท (VB6 ไม่เคยมีประเภททศนิยมชั้นหนึ่งแม้ว่าจะมี CDec)
  • การสนับสนุนชั้นหนึ่งสำหรับ Guid
  • การสนับสนุนชั้นหนึ่งสำหรับจำนวนเต็ม 64 บิต
  • ห้องสมุดคอลเลกชันที่ดีขึ้น
  • ReportViewer
  • มัลติเธรดไลบรารีงานแบบขนาน

ข้อเสียของ VB6:

  • คุณจะสังเกตเห็นประสิทธิภาพ อาจไม่เพียงพอที่จะกังวล แต่เชื่อฉันคุณจะสังเกตเห็นมัน VB6 คอมไพล์รหัสเนทีฟหลังจากทั้งหมด

เพื่อความเป็นธรรมต่อไปนี้เป็นข้อเสียบางประการของการบำรุงรักษาโซลูชัน VB6 / .NET แบบรวม:

  • การบำรุงรักษาสองชั้นการเข้าถึงข้อมูล (สมมติว่าแอป VB6 ของคุณมีอยู่จริง)
  • การเดินสายพิเศษเพื่อแสดงบริการ / แบบฟอร์ม / ฯลฯ จากด้านหนึ่งไปอีกด้านหนึ่ง
  • เพิ่มความซับซ้อน / สถาปัตยกรรมเป็นสองเท่าเพื่อรักษาไว้ในหัวของคุณ

ตอนนี้ตามที่คุณได้บอกใบ้ไว้คุณควรสร้างสถาปัตยกรรมของคุณใหม่ตั้งแต่ต้นหากคุณเริ่มเขียนโค้ดใน. NET อย่างไรก็ตามดูเหมือนว่าไม่มีใครใน บริษัท ของคุณที่คุ้นเคยกับโลกการเขียนโปรแกรม. NET และ / หรือ Java ซึ่งเป็นที่ที่มีรูปแบบและการปฏิบัติมากมายที่เป็นเรื่องธรรมดาสำหรับกรอบองค์กรขนาดใหญ่

หากคุณพาใครบางคนที่คุ้นเคยกับการลากปุ่มบนแบบฟอร์มดับเบิลคลิกที่มันและเขียนสตริง SQL โดยตรงในตัวจัดการเหตุการณ์คลิกและมันก็ใช้ได้กับพวกเขามันยากมากที่จะทำให้พวกเขาเห็นข้อดีของการติดตาม SOLID หลักการออกแบบ ในทางตรงกันข้ามถ้าคุณกัดกระสุนและตัดสินใจว่ารหัสใหม่ทั้งหมดจะถูกครอบคลุม 90% หรือมากกว่าโดยการทดสอบหน่วยโดยอัตโนมัติคุณจะรู้ได้อย่างรวดเร็วว่าเป็นการยากที่จะทำเว้นแต่คุณจะนำหลักการออกแบบ SOLID มาใช้

ดังนั้นคุณต้องดูอย่างจริงจังกับความเป็นจริงของสถานการณ์ ในกรณีของฉันฉันเป็นโปรแกรมเมอร์คนเดียวและฉันตัดสินใจที่จะทดสอบรหัสใหม่ทั้งหมดแม้ว่าจะไม่เคยมีประสบการณ์มาก่อนก็ตาม ฉันไม่สามารถความเครียดได้มากพอว่าสิ่งนี้จะส่งผลกระทบในทางลบต่อสิ่งที่ฉันสามารถทำได้ในสัปดาห์แรกแม้กระทั่งเดือนแรก ถึงกระนั้นฉันก็ตั้งใจแน่วแน่ที่จะทำมันและฉันก็มีการบายอินจากฝ่ายบริหาร คนส่วนใหญ่ไม่มีความหรูหรานั้น ตอนนี้ฉันมีรหัสจำนวนมากและฉันเพิ่งเสร็จสิ้นการปรับโครงสร้างครั้งใหญ่โดยแทบไม่มีปัญหา

ในความเป็นจริงคุณจะไม่ทำการทดสอบหน่วยซึ่งหมายความว่าเป็นการยากที่จะพิสูจน์หลักการเช่นการพึ่งพาการฉีดเข้ากับเพื่อนร่วมทีมของคุณ คุณจะต้องขาย. NET ในข้อดีอื่น ๆ นอกเหนือจากผลประโยชน์ทางสถาปัตยกรรม คุณต้องมุ่งเน้นการสนับสนุนห้องสมุดที่ดีขึ้นและเครื่องมือที่ดีกว่า นั่นเป็นสิ่งเดียวที่จะสะท้อน ฉันขอแนะนำสิ่งต่อไปนี้ในตัวอย่างของคุณ:

  • สร้างโครงการ Windows Forms (อยู่ห่างจาก WPF และ xaml - มันน่าตกใจเกินไป)
  • เชื่อมต่อกับฐานข้อมูล SQL (ฐานข้อมูลทดสอบบางอย่าง)
  • ใช้ Linq2Sql หรือ EntityFramework เพื่อสร้างตัวแบบข้อมูล
  • สร้างคลาสที่เก็บข้อมูลที่มีวิธีการส่งคืนรายการเอนทิตีบางส่วน
  • เขียนแบบสอบถามในวิธีการที่ใช้ linq ชี้ให้เห็น Intellisense
  • ชี้ให้เห็นว่า linq ใช้ได้กับทุกวัตถุไม่ใช่แค่เอนทิตี้
  • แสดงว่าถ้าคุณเปลี่ยนฐานข้อมูลและสร้างโมเดลใหม่คุณจะได้รับข้อผิดพลาดในการคอมไพล์
  • วางDataGridViewบนหน้าต่างหลัก
  • แสดงให้เห็นถึงฐานข้อมูลโดยการเติมตารางกับหน่วยงานจากพื้นที่เก็บข้อมูล
  • ชี้ให้เห็นทุกสิ่งที่ยอดเยี่ยมเกี่ยวกับตารางที่ดีกว่า VB6 มาก
  • สร้างไฟล์. rdlc (รายงาน)
  • ทำรายงานอย่างง่ายภายใน Visual Studio
  • วางโปรแกรมดูรายงานบนหน้าต่างและแสดงรายงานภายในโปรแกรมดูรายงาน
  • (เห็นได้ชัดว่าคุณต้องติดตั้ง ReportViewer และฝึกฝนทั้งหมดนี้ก่อน)
  • เกิดปัญหา "ช่องว่างตรงกลาง" ขึ้นมาแล้วแสดงให้เห็นถึงการแก้ปัญหาโดยการสร้างวิธีการที่ใช้Actionเป็นพารามิเตอร์ ทำสิ่งนี้เป็นครั้งแรกโดยส่งผ่านวิธีอื่นเป็นพารามิเตอร์จากนั้นก็เป่าความคิดของพวกเขาโดยส่งตัวแทนที่ไม่ระบุชื่อโดยใช้ไวยากรณ์แลมบ์ดา
  • แสดงให้เห็นถึงข้อมูลทั่วไปโดยใช้คลาสList<T>และDictionary<T1,T2>คอลเลกชันและแสดงวิธีการสร้างโค้ดที่พิมพ์ได้อย่างแข็งแกร่ง (VB6 มีสิ่งที่คล้ายกัน แต่มันพิมพ์แบบไดนามิก)
  • เขียนforeachลูปที่ขนานกันอย่างน่าอายใช้System.Diagnostics.Stopwatchในการวัดเวลาที่ใช้ในการดำเนินการจากนั้นใช้ไลบรารี่งานแบบขนานเพื่อเปลี่ยนลูปเป็นParallel.Foreachลูปและสาธิตความเร็วขึ้นโดยสมมติว่าคุณใช้เครื่องมัลติคอร์
  • แสดงให้เห็นถึงความสามารถในการเพิ่มตัวจัดการข้อยกเว้นส่วนกลาง (นี่คือสิ่งที่ VB6 ไม่สามารถทำได้)

นั่นคือสิ่งที่ฉันจะทำ


1

ฉันว่านี่เป็นสถานการณ์ที่คุณจะต้องใส่หมวกนักการเมืองแทนการเขียนโปรแกรมของคุณ คุณต้องระวังให้มากว่าคุณโต้แย้งอย่างไรและไม่เป็นปฏิปักษ์กับผู้ชมของคุณ ตรวจสอบให้แน่ใจว่าคุณแสดงข้อดีของ. Net แทนการแสดงข้อเสียของ VB การโต้แย้งข้อเสียของ VB จะทำให้เพื่อนร่วมงานของคุณอยู่ในตำแหน่งที่พวกเขาต้องปกป้องการตัดสินใจของพวกเขาและบังคับให้พวกเขายอมรับว่าภาษาที่พวกเขาลงทุนอย่างหนักนั้นเป็นภาษาที่ไม่ดี แสดงให้พวกเขาเห็นว่าการย้ายไปที่. NET จะช่วยเพิ่มเครื่องมือที่พวกเขามีให้และทำให้ชีวิตของพวกเขาง่ายขึ้น

วิธีที่เหมาะที่สุดของฉันในการสร้างอาร์กิวเมนต์นี้คือหางานหรือชิ้นส่วนของรหัสที่ทุกคนบ่นตลอดเวลาและแก้ไขโดยใช้. NET ฉันไม่คุ้นเคยกับ VB เป็นพิเศษ แต่นี่เป็นรายการย่อของงานที่น่ารำคาญที่อาจทำให้ใช้งานง่ายขึ้นโดยใช้. NET แทนที่จะเป็น VB

  • การจัดการสตริง
  • การแยกวิเคราะห์ XML
  • การค้นหา / จับคู่ / Regex
  • คณิตศาสตร์ (ภาษาที่ใหม่กว่ามักจะมีไลบรารีคณิตศาสตร์ที่ครอบคลุมและรวดเร็วกว่า)
  • การสร้าง / ออกแบบ GUI

เลือกงานใดภารกิจหนึ่งข้างต้นหรืองานอื่น ๆ ที่เฉพาะเจาะจงกับโครงการที่คุณมักจะทำงานและนั่งลงกับพวกเขาและเขียนรหัสจริง ๆ ตั้งแต่เริ่มต้นซึ่งจัดการปัญหาได้อย่างรวดเร็วและง่ายดาย การแสดงขั้นตอนการเขียนรหัสจริง ๆ แล้วจะแสดงเครื่องมือที่ VS รุ่นใหม่นำมาไว้ในตารางและแสดงหลักฐานว่าการย้ายไปที่. NET จะไม่ทำให้ชีวิตของใครยากขึ้น

การเข้าสู่สิ่งนี้คุณต้องทำการบ้านอย่างแน่นอน หากคุณไม่แน่ใจว่าเครื่องมือทำงานอย่างไรหรือมีรหัสที่ทำงานไม่ถูกต้องคุณจะไม่สามารถเอาชนะพวกเขาได้


0

สิ่งแรกที่คุณพูดคือ Microsoft ไม่สนับสนุน VB6 อีกต่อไป ในขณะที่คุณสามารถทำงานต่อไปได้คุณต้องเข้าใจถึงตัวเลือกต่าง ๆ ในระยะยาวว่าเป็นศูนย์ ฉันไม่รู้ด้วยซ้ำว่าแอป VB6 จะทำงานบน Windows8 หรือไม่หรือว่า IDE นั้นจะทำงานบน Win8

ดังนั้นคุณต้องทำการเขียนใหม่อย่างมีประสิทธิภาพในที่สุดและถ้าเป็นเช่นนั้นคุณอาจเริ่มต้นตอนนี้แทนที่จะทำในภายหลังให้เวลากับคุณมากพอที่จะคิดว่าเทคโนโลยีใหม่ที่คุณต้องการใช้ (ในขณะที่ VB.NET ฟังดูดีที่สุด นี่เป็นโอกาสของคุณที่จะลองสิ่งที่ล้ำสมัยมากขึ้นเช่นทำให้แอปทำงานบนไอแพด)

ในระยะสั้นคุณสามารถบรรเทาปัญหาเล็กน้อยได้โดยการแนะนำส่วนใหม่เป็นส่วนประกอบ COM สำหรับแอพที่มีอยู่เพื่อบริโภคโดยหวังว่าส่วนประกอบเหล่านี้จะยังคงอยู่เมื่อการเขียนซ้ำที่หลีกเลี่ยงไม่ได้เกิดขึ้น

ฉันไม่รำคาญกับข้อโต้แย้งทางเทคนิคว่าทำไม. NET ดีกว่า VB6 คุณจะต้องโต้เถียงกับการสูญเสียที่นั่นเทคโนโลยีในตัวเองไม่เคยแก้ปัญหาได้ มันขึ้นอยู่กับคุณว่าคุณใช้เทคโนโลยีนั้นอย่างไรและหากแอป VB6 แก้ปัญหาให้คุณก็ไม่มีเหตุผลที่จะตอบ คุณสามารถพูดคุยเกี่ยวกับความง่ายในการบำรุงรักษาหรือความพร้อมใช้งานของพนักงานที่มีประสบการณ์ แต่เมื่อคุณยอมรับว่าพนักงานปัจจุบันของคุณไม่มีความเชี่ยวชาญในเทคโนโลยีใหม่และจะต้องผ่านการฝึกอบรมแล้วใช้เวลาในการเร่งความเร็วเต็มที่ กับมัน คุณจะต้องตอบคำถามเกี่ยวกับวิธีการเขียนซ้ำจำนวนมากยิ่งแย่กว่าโครงการเดิม (บางครั้งเนื่องจากขาดความเชี่ยวชาญบางครั้งเกิดจากการออกแบบที่ยิ่งใหญ่เกินไป)


MS จะสนับสนุน VB6 บนพีซี Intel / AMD ที่ใช้ Windows 8 คุณไม่สามารถเขียนแอพ Metro ใน VB6 ได้ แต่คุณไม่สามารถเขียน Metro apps ใน. NET ได้เช่นกัน ทั้งสองถูกสร้างขึ้นบน Win32 อย่างน้อยโค้ดที่เขียนใน C # สำหรับ. NET ควรจะง่ายกว่าในการพอร์ตไปยัง WinRT เพื่อให้ทำงานบน Metro แต่ไม่นับว่าเป็นการสร้างใหม่อย่างง่าย
Scott Whitlock

0

ให้เขาอุปมา "รถคันใหม่กับรถคันเก่า":

ใช่ทั้งสองอาจจะพาคุณไปยังจุดหมายของคุณ อย่างไรก็ตามรถใหม่ไม่จำเป็นต้องมีข้อเหวี่ยงมันไม่จำเป็นต้องทำให้หายใจไม่ออกไม่จำเป็นต้องใช้แผนที่ล้อของมันไม่ล็อคเมื่อคุณเบรกอย่างแรงและในที่สุดคุณก็มีแนวโน้มที่จะเดินออกไปจากรถชน .

  • VB6 เป็นมรดกคือ COBOL ใหม่
  • .NET มีกรอบงานที่ดีกว่า
  • .NET มีเครื่องมือที่ดีกว่า
  • .NET มีประสิทธิภาพที่ดีขึ้น
  • .NET มี IDE ที่ดีกว่า
  • .NET มีการสนับสนุนทางภาษาที่ดีกว่า
  • .NET มีคุณสมบัติที่ดีกว่า
  • .NET มีการสนับสนุนชุมชนที่ดีขึ้น

7
การตรวจสอบรถยนต์มักจะล้มเหลวและคุณไม่แตกต่างกัน สิ่งที่รถคันเก่ามีซึ่งรถคันใหม่ไม่ได้เป็นรถที่จ่ายให้! หากคุณเป็นเจ้าของรถแท็กซี่และได้รับเงินและมันทำให้คุณมีเงินมากกว่าค่าใช้จ่ายในการบำรุงรักษาและรถใหม่จะเสียค่าใช้จ่ายในการจ่ายเงินมากกว่าที่คุณทำซึ่งคุณอยากเป็นนักธุรกิจหรือไม่?

2
@JarrodRoberson จ่ายให้ แต่พวกเขามักจะเบรกบ่อยขึ้นและหลังจากนั้นไม่นานก็จะไม่ทำงานอีกต่อไป การเปรียบเทียบรถยอดเยี่ยม :)
Steven Jeuris

1
ที่จริงแล้วรถคันนี้คล้ายคลึงกันดี หัวหน้าของ OP มีรถแท็กซี่ที่เกิดขึ้นและ OP ควรพิจารณาในขณะที่เขาเข้าใกล้ สวิตช์เต็มไม่สามารถเกิดขึ้นได้ในแต่ละวัน แต่เรามาเริ่มต้นเคลื่อนย้ายบิตเปลี่ยนชิ้นส่วนทีละอัน
ZJR

1
เจ้าของธุรกิจออกแบบและสร้างสิ่งนี้เอง มันมีแนวโน้มที่จะจ่ายให้กับตัวเองหลายต่อหลายครั้งและการบำรุงรักษาสำหรับทุกเจตนาและวัตถุประสงค์ฟรีเนื่องจากมีเพียง 3 นักพัฒนาและเขาเป็นหนึ่งในพวกเขา อย่างที่ฉันบอกว่าการเปรียบเทียบรถยนต์นั้นแย่มาก ๆ นี่เป็นสิ่งที่พิเศษและคุณทำให้ฉันมีข้อโต้แย้งกับคุณซึ่งเป็นเรื่องพื้นฐานทางธุรกิจ ซอฟต์แวร์ใหม่ที่ดีที่สุดจะทำให้เขามีกำไรน้อยลงในแต่ละปีอย่างดีที่สุดและเสียเงินในระยะเวลาที่ไม่แน่นอน

2
แอพพลิเคชั่นไม่มีการสึกหรอเอนโทรปีเหมือนของจริงที่มีอยู่จริงพวกเขาก็ไม่ฝ่อเหมือนกันดังนั้นพวกเขาจึงไม่ทรุดโทรมและไม่พังโดยไม่คำนึงถึงการใช้งานดังนั้นการเปรียบเทียบกับสิ่งของทางกายภาพ แอปพลิเคชันจะทำงานตลอดไปตราบใดที่มันให้บริการตามวัตถุประสงค์ บริษัท หนึ่งที่ฉันทำงานเมื่อสองสามปีก่อนมีเครื่องที่ใช้ MS-DOS รุ่นเก่าที่ควบคุมเครื่องอ่านการ์ดที่ประตู แนวคิดที่ว่าซอฟต์แวร์เสื่อมสภาพนั้นเป็นเรื่องโง่ ที่กล่าวว่าแผนชีวิตที่ดีควรอยู่ในสถานที่ แม้ว่าแผนนั้นจะไม่เขียนซอฟต์แวร์ซ้ำ

0

ก่อนอื่นฉันคิดว่าคุณควรเปลี่ยนคำถาม (ไม่ใช่ใน stackexchange แต่อยู่ใน บริษัท ของคุณ) มันไม่ได้เป็นเช่นนั้นทำไม. Net จึงดีกว่า VB6 แต่อย่างอื่น ๆ เช่นตั้งแต่ VB6 ไม่ได้รับการสนับสนุนอีกต่อไปมันเป็นเวลาที่จะดำเนินการต่อไป ถามผู้มีส่วนได้เสียว่าเทคโนโลยี 'ใหม่' ควรเป็นอย่างไร อาจจะไม่ใช่. Net

แต่ดูเหมือนคุณจะต้องย้ายไปใช้เทคโนโลยีใหม่และได้รับรูปแบบการเขียนโปรแกรมและแนวทางปฏิบัติที่ดี คำตอบของส่วนที่สองนั้นยากกว่ามาก คุณอาจต้องทำในส่วนเล็ก ๆ ของแอปพลิเคชันและพิสูจน์ว่ามันคุ้มค่าในขณะที่มันมีเสถียรภาพมากขึ้นง่ายต่อการบำรุงรักษาและอื่น ๆ


-1

บอกเจ้านายของคุณให้เขียนโฆษณาสองรายการที่ต้องการ หนึ่งสำหรับนักพัฒนา C # หนึ่งสำหรับผู้เชี่ยวชาญ VB6 เอามันออกไป เปรียบเทียบผลลัพธ์

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.