การทดสอบหน่วยเป็นวัตถุประสงค์หลักของรูปแบบ MVC หรือไม่


14

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

ในขณะที่ฉันรู้ว่าพวกเขาเป็นจุดที่ถูกต้องฉันยังคงสงสัยว่ามันเป็นเหตุผลสำคัญเพราะ (i) แม้ว่าฉันตัดสินใจที่จะไม่เขียน Unit Testcases MVC เป็นตัวเลือกที่น่าจะเป็นไปได้ (ii) ระบบ GUI จำนวนมาก ติดตาม MVC

ดังนั้นคำถามคือ 'การทดสอบหน่วยเป็นเป้าหมายหลักของรูปแบบ MVC หรือไม่'

แก้ไข:ฉันคิดว่าพวกเขาอาจพูดถึงความสะดวกในการทดสอบพัฒนาขับเคลื่อน / เขียนทดสอบ NUnit นี่เป็นเพราะเราสามารถ testcase แบบจำลองสำหรับ (ให้มุมมองที่สะท้อนให้เห็นถึงการเปลี่ยนแปลงสถานะของรุ่น) - โปรดแก้ไขให้ฉันถ้าฉันผิด


11
คุณไม่ได้ผ่านการสัมภาษณ์ใช่มั้ย ถ้าไม่โชคดีนะ ฉันจะไม่เข้าร่วม บริษัท ที่มีความคิดผิดไปตั้งแต่เริ่มต้น :) การทดสอบหน่วยไม่ใช่เป้าหมายหลักแน่นอน อาจช่วยทดสอบหน่วยได้เนื่องจากข้อกังวลทั้งหมดแยกจากกัน แต่ไม่ใช่วัตถุประสงค์หลักแน่นอน
Rudy

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

@ รูดี้ไม่ฉันไม่ได้ผ่าน: P มันเป็น Dev Centre ของวาณิชธนกิจชั้นนำ อีกทั้งพวกเขาดูดีและเป็นจริงกับคำถามอื่น ๆ และนั่นคือเหตุผลที่ฉันสับสนกับเรื่องนี้
WinW

@deadalnix ใช่จริง .. รู้สึกเหมือนกันหลังจากที่ฉันเห็นคำตอบที่นี่ แต่ฉันไม่แน่ใจก่อนโพสต์ที่นี่
WinW

ฉันเห็นด้วยกับ deadalnix โดยสิ้นเชิง อย่าไปที่ บริษัท นี้
รูดี้

คำตอบ:


33

วัตถุประสงค์หลักคือ "การแยกความกังวล" เนื่องจากตัวแบบมุมมองและตัวควบคุมทั้งหมดมีความรับผิดชอบที่แตกต่างกัน

เขียนกระดาษซีร็อกซ์ PARC เดิมกล่าวว่า:

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

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


2
ฉันจะบอกว่าวัตถุประสงค์หลักคือการเปิดใช้งานคำสั่งการจัดการโดยตรง (โดยทั่วไปคือสิ่งที่คำพูดบอกไว้) และการเพิ่มขีดความสามารถของผู้ใช้
Jörg W Mittag

14

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

ฉันเดาว่าคงไม่ใช่เรื่องยากเลยที่จะใช้ MVC ในทางที่ยากสำหรับการทดสอบหน่วย (ห่า - วิธีที่ฉันทำในครั้งแรกนั้นทดสอบได้ยาก)

ในอีกด้านหนึ่งอาจกล่าวได้ว่ารูปแบบใด ๆ (ยกเว้นสิ่งเดียวเช่น Singleton) ช่วยอำนวยความสะดวกในการทดสอบหน่วยเนื่องจากพวกเขามักส่งเสริมการแยกส่วน - แต่มันเป็น 'วัตถุประสงค์หลัก' หรือไม่? แทบจะไม่


12

MVC (เช่นเดียวกับรูปแบบการออกแบบส่วนใหญ่รู้) เป็นวิธีที่ก่อนที่จะมีการทดสอบหน่วยเป็นที่รู้จัก หนังสือ GoF ถูกตีพิมพ์ในปี 1994 และพวกเขาเป็นเพียงการบันทึกรูปแบบที่มีการใช้งานมานานหลายปี (ถ้าไม่ใช่ทศวรรษ) ก่อนหน้านี้ (และไม่มีการกล่าวถึงการทดสอบหน่วยในนั้น) เกี่ยวกับการทดสอบหน่วยฉันไม่สามารถหาเวลาที่แน่นอนเกี่ยวกับเมื่อมันกลายเป็น "สาธารณะ" - ฉันเองอ่านเกี่ยวกับเรื่องนี้ในบทความที่เกี่ยวข้องกับ Extreme Programming และหนังสือ XP เล่มแรก ออกมาในปี 1999

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


การอ้างอิงไทม์ไลน์เป็นการกล่าวถึงที่ดีรองรับอาร์กิวเมนต์
WinW

ดูเหมือนจะมีปัญหาเรื่องวันที่ heim.ifi.uio.no/~trygver/themes/mvc/mvc-index.htmlกล่าวว่า "MVC รู้สึกตั้งแต่ปี 1978 ในฐานะโซลูชั่นการออกแบบสำหรับปัญหาเฉพาะ" ไม่ต้องกังวล ... ยังมีข้อโต้แย้งของคุณอยู่ในระดับดี - MVC อยู่ที่นั่นนานก่อนที่การทดสอบจะเกิดขึ้น
WinW

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

2
@ GreenMatt ฉันรู้ว่าการทดสอบหน่วยไม่ได้คิดค้นโดย Kent Beck เพียงนำมาใช้ใหม่ :-) แต่ AFAIK มันค่อนข้างเป็นที่รู้จักก่อนที่ XP และ Agile จะเริ่มเผยแพร่มันอย่างกว้างขวาง
PéterTörök

@ PéterTörök: ฉันจำได้ว่า 1) เขียนโค้ดง่าย ๆ ของฉันเองเพื่อทดสอบฟังก์ชั่นของแต่ละคนตลอดทางจนถึงวิทยาลัย 2) เห็นภาพและอ่านบทความเกี่ยวกับโมเดลน้ำตกในยุค 80 หรือ 90 ด้วยเฟสที่เรียกว่า "การเข้ารหัสและการทดสอบหน่วย" (เทียบกับ "การเข้ารหัส") (ขออภัยฉันจำไม่ได้ว่าที่ไหนดังนั้นจึงไม่สามารถให้การอ้างอิงได้) ดังนั้นการทดสอบหน่วยได้รับการพัฒนาไปรอบระยะเวลาหนึ่งแล้ว
GreenMatt

2

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


0

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

ASP.NET MVC มีความสามารถบางอย่างที่ทำให้เป็นตัวเลือกที่ดีที่สุดในการเลือกหากคุณต้องการอย่างน้อยหนึ่งอย่างต่อไปนี้:

การควบคุม HTML ระดับสูงที่สร้างขึ้น : ไม่เหมือนกับฟอร์มเว็บมุมมองใน ASP.NET MVC จะแสดง HTML ตามที่คุณบอก เมื่อเร็ว ๆ นี้ฟอร์มเว็บได้รับการปรับปรุงในพื้นที่นี้ แต่ก็ยังไม่มีระดับการควบคุม MVC

การทดสอบหน่วยที่ง่ายขึ้น : ด้วย ASP.NET MVC ทำให้ง่ายต่อการติดตามรูปแบบการทดสอบเช่นการพัฒนาโดยใช้การทดสอบ (TDD) เนื่องจากวงจรชีวิตของเหตุการณ์ที่ซับซ้อนในเว็บฟอร์มด้านบนของเฟรมเวิร์กตามการควบคุม TDD นั้นง่ายกว่ามากด้วย MVC

การแยกข้อกังวล : สิ่งนี้หมายถึงการแยกทุกด้านของระบบออกจากกันอย่างชัดเจน เนื่องจากรูปแบบที่ใช้จึงทำให้แอปพลิเคชัน MVC ถูกแบ่งออกเป็นส่วนที่แยกและไม่ต่อเนื่อง (รุ่นมุมมองและตัวควบคุม) ซึ่งทำให้ง่ายต่อการบำรุงรักษา

ผลประโยชน์อื่น ๆ ได้แก่ :

•รูปแบบ MVC ทำให้การจัดการความซับซ้อนง่ายขึ้นโดยแยกการทำงานของแอปพลิเคชันออกเป็นสามส่วนหลัก ๆ อย่างชัดเจนรูปแบบมุมมองและคอนโทรลเลอร์

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

ASP.NET MVC ให้การสนับสนุนที่ดีกว่าสำหรับการพัฒนาที่ขับเคลื่อนด้วยการทดสอบ (TDD)

ASP.NET MVC ทำงานได้ดีสำหรับเว็บแอปพลิเคชันที่ได้รับการสนับสนุนโดยทีมนักพัฒนาขนาดใหญ่และสำหรับนักออกแบบเว็บไซต์ที่ต้องการการควบคุม HTML ระดับสูง การประมวลผลคำขอ ASP.NET MVC

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