วิธีการจัดระเบียบรหัสซ้ำ ๆ


11

ทีมของฉันสร้างเว็บฟอร์มได้หลายครั้ง แบบฟอร์มเหล่านี้ส่วนใหญ่เพียงส่งอีเมลและมีเพียงไม่กี่อย่างที่เขียนฐานข้อมูล

ตอนนี้แต่ละรูปแบบอาศัยอยู่ในโซลูชันแยกต่างหากใน Visual Studio Team Foundation Server นั่นหมายความว่าเรามีโครงการที่แตกต่างกันเกือบ 100 โครงการซึ่งทำให้ยากต่อการรักษาความมั่นคง แต่ละรูปแบบมีลักษณะเฉพาะที่แตกต่างกันไป แต่ทุกคนก็ทำในสิ่งเดียวกัน

ฉันกำลังมองหาที่จะรวมตัวเหล่านี้อย่างใดและฉันสามารถใช้คำแนะนำบางอย่าง

  • ฉันควรพยายามสร้างไฟล์โซลูชันหนึ่งไฟล์โดยใช้โปรเจคฟอร์มทั้งหมดของเราหรือไม่ ไม่มีรหัสการประปาจำนวนมาก แต่ฉันสามารถสร้างผู้ช่วยสองสามชั้นเพื่อช่วยในการจัดรูปแบบอีเมลและอื่น ๆ มันจะมีประโยชน์มากในการแบ่งปัน CSS, JavaScript, การควบคุมและรูปภาพในโครงการต่างๆ
  • เนื่องจากเราเป็นร้านค้าของ Microsoft จะมีประโยชน์ใด ๆ ที่จับต้องได้ในการไปกับ MVC ผ่าน Webforms สำหรับสถานการณ์เฉพาะนี้หรือไม่ ฉันขายให้กับแนวคิดของ MVC โดยรวม แต่มันจะช่วยให้ฉันรวบรวมแบบฟอร์มการเก็บข้อมูล 15 เขตข้อมูลได้อย่างมีประสิทธิภาพมากขึ้นหรือไม่ถ้าแบบฟอร์มทั้งหมดนั้นส่งอีเมลหรือไม่ รูปแบบที่ทำให้ฉันคิดว่าเรื่องนี้มีตรรกะที่ดีเล็กน้อยเพื่อแสดงและซ่อนฟิลด์ตามการตอบสนองของผู้ใช้และดูเหมือนว่ามันจะมีประสิทธิภาพน้อยกว่าในการใช้ MVC และ jQuery

2
สิ่งนี้ถูกย้ายที่นี่จากเมตา ควรเป็นเช่นนั้น
Josh K

1
@Josh Stack Overflow สำหรับคำถามที่เกี่ยวข้องโดยตรงกับปัญหาเฉพาะในรหัส การออกแบบโปรแกรมและเวิร์กโฟลว์อยู่ในหัวข้อที่นี่

@ Mark: มันฟังดูไม่เป็นอัตนัยเพราะในนั้นจะมีวิธีการแก้ปัญหา "แนวปฏิบัติที่ดีที่สุด" ในอุดมคติ ฉันไม่ใช่คนที่แต่งตัวประหลาด MS ดังนั้นฉันจึงไม่ทราบว่าสิ่งที่ซับซ้อนคืออะไร แต่ฉันจะเสี่ยงต่อการเดาว่านี่จะเป็นคำตอบที่ดีที่สุดในลักษณะที่ไม่ใช่อัตนัย
Josh K

ตกลง สิ่งนี้จะถูกปิดใน SO
Walter

1
มันถูกถามเกี่ยวกับ SO ดังนั้นที่นี่
ChrisF

คำตอบ:


3

การกู้แฟคตอริ่งใหม่อย่างปลอดภัยโดยไม่มีการทดสอบนั้นยากและเต็มไปด้วยอันตราย

ฉันจะเริ่มต้นด้วย:

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

  • ใช้กรณีทดสอบเหล่านั้นกับแบบฟอร์ม 100 รูปแบบหรือมากกว่านั้น (สลับการครอบคลุมรหัสบนเพื่อช่วยให้คุณติดตามเส้นทางของโค้ด)

หลังจากนั้นคุณก็อยู่ในฐานะที่จะเห็นสิ่งที่คุณสามารถแยกออกมาได้อย่างปลอดภัยจากนั้นคุณสามารถ (ตัวอย่าง):

  • เรียกใช้เครื่องมือตรวจจับการทำสำเนารหัสของคุณ (ไม่แน่ใจว่าสิ่งที่เรียกว่าใน. NET ใน Java เรามี CPD) นำแบบฟอร์มที่เหมือนกัน 13 อันออกทันที ตอนนี้ทำการทดสอบอีกครั้ง - Yay! พวกเขาทั้งหมดผ่านยกเว้นรูปแบบ 11 ตกลงดังนั้นเราจึงยังไม่สามารถลบได้

  • ลบรหัสการจัดรูปแบบอีเมลภายในเครื่องทั้งหมดและรับทุกรูปแบบเพื่อโทรหาโมดูลการประมวลผลอีเมลทั่วไป เรียกใช้การทดสอบพวกเขาทั้งหมดผ่านยกเว้นหนึ่ง hhmmm ตกลง .... อักขระ UTF-8 แก้ไขในโมดูลทั่วไปเรียกใช้การทดสอบอีกครั้งใช่เราทุกคนดี!

ล้างและทำซ้ำ


2
+1 ดู Michael Feathers ทำงานอย่างมีประสิทธิภาพด้วยรหัสดั้งเดิมamazon.com/dp/0131177052สำหรับคำแนะนำเกี่ยวกับวิธีการปรับโครงสร้างใหม่
Michael Brown

Ohhhh หนังสืออ้างอิงที่ดี - ฉันชอบหนังสือเล่มนั้น
Martijn Verburg

0

ฉันขอแนะนำให้แยกส่วนการส่งออก ใช้ Model / View / Controller ใส่แบบฟอร์มใน View และให้พวกมันใช้คอนโทรลเลอร์เดียวกัน ตัวควบคุมนี้สามารถทำการกระทำทั่วไปเช่นส่งอีเมลไปยังที่อยู่เริ่มต้นหรือโอนข้อมูลแบบฟอร์มไปยังตัวควบคุมที่สามารถทำได้ ด้วยวิธีการทั้งหมดที่คุณต้องทำเพื่อสร้างฟอร์มใหม่คือการสร้างฟอร์มและส่งออกผลลัพธ์ไปยังตัวควบคุมนั้นโดยตรง เอกสารนี้อาจมีอยู่ในโครงการเดียวซึ่งจะช่วยให้คุณสามารถแบ่งปัน CSS และ javascript ตามที่คุณกล่าวถึง

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

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


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

นอกจากนี้คำแนะนำใด ๆ เกี่ยวกับการจัดการตรรกะของฟอร์มเช่นการเติมแบบเลื่อนลงตามการเลือกในการเลื่อนลงอีกหรือไม่ jQuery เป็นตัวเลือกเดียวถ้าเราไปด้วยเส้นทาง MVC?
Josh Earl

@JoshEarl: ฉันได้แก้ไขความคิดสำหรับฟอร์แมตเตอร์แล้ว แต่ฉันไม่สามารถให้คำแนะนำเกี่ยวกับ jQuery ได้ ฯลฯ หน้าเว็บไม่ใช่ส่วนที่ฉันแนะนำโดยเด็ดขาด คุณอาจต้องใช้การออกแบบ MVC เต็มรูปแบบหนึ่งคอนโทรลเลอร์ต่อหน้าหากสิ่งต่าง ๆ มีความซับซ้อนเกินไป ตามที่ @Martijn กล่าวว่าการทดสอบหน่วยจะช่วยให้คุณเห็นความต้องการของคุณอย่างแท้จริง การออกแบบของฉันถือว่าค่อนข้างคล้ายกันมากระหว่างแบบฟอร์ม
Michael K
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.