ข้อได้เปรียบที่ใหญ่ที่สุดในการใช้ ASP.Net MVC กับเว็บฟอร์ม


164

อะไรคือข้อดีของการใช้อย่างใดอย่างหนึ่งมากกว่าที่อื่น ๆ ?

คำตอบ:


165

ข้อดีหลักของASP.net MVCคือ:

  1. เปิดใช้งานการควบคุม HTML ที่แสดงผลอย่างสมบูรณ์

  2. ให้การแยกความกังวล (SoC) ที่สะอาด

  3. ช่วยให้การทดสอบขับเคลื่อนการพัฒนา (TDD)

  4. ผสานรวมกับกรอบงาน JavaScript ได้ง่าย

  5. การออกแบบตามธรรมชาติของเว็บ

  6. URL ที่สงบซึ่งช่วยให้ SEO

  7. ไม่มีเหตุการณ์ ViewState และ PostBack

ข้อได้เปรียบหลักของASP.net Web Formคือ:

  1. มันให้การพัฒนา RAD

  2. รูปแบบการพัฒนาที่ง่ายสำหรับนักพัฒนาที่มาจากการพัฒนา winform


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

7
@ rodbv: จริงมาก แต่ MVC จะผลักคุณไปในทิศทางที่ถูกต้องหรืออย่างน้อยก็ไม่ทำให้คุณกระโดดผ่านห่วงเพื่อทำเช่นนั้น ดังนั้นบางทีที่จุดควรอ่านบางสิ่งบางอย่างเช่น 'ทำให้ SoC ง่ายต่อการใช้'
เอริคแวน Brakel

4
"เปิดใช้งานการทดสอบพัฒนาไดรฟ์" เหนือวิธีอื่นอย่างไร ฉันยังสับสนว่าจะช่วยให้ URL สงบเมื่อ HttpContext.RewritePath วิธีการ (String) ได้รับรอบตั้งแต่. NET 2.0?
Mark Broadhurst

2
ในขณะที่ประเด็นเหล่านี้ส่วนใหญ่มีความถูกต้องสำหรับด้าน MVC แต่ส่วนใหญ่จะถูกรวมเข้ากับ WebForms ทันที
rtpHarry

ลิงก์ไปยังแหล่งที่มาของคำตอบนี้พร้อมรายละเอียดเพิ่มเติม: weblogs.asp.net/shijuvarghese/archive/2008/07/09/…
DK

91

ASP.NET Web Forms และ MVC เป็นสองเฟรมเวิร์คของเว็บที่พัฒนาโดย Microsoft - ทั้งคู่เป็นตัวเลือกที่ดี ทั้งเฟรมเวิร์กเว็บจะถูกแทนที่โดยเฟรมเวิร์กอื่น ๆ และไม่มีแผนให้รวมเข้ากับเฟรมเวิร์กเดียว การสนับสนุนและการพัฒนาอย่างต่อเนื่องนั้นดำเนินการคู่ขนานโดย Microsoft และจะไม่ 'หยุดไป'

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

เว็บฟอร์ม ASP.NET:

  • การพัฒนาสนับสนุนรัฐ •ให้ภาพลวงตาที่เว็บแอปพลิเคชันตระหนักถึงสิ่งที่ผู้ใช้ทำเช่นเดียวกับแอพพลิเคชั่น Windows ฟังก์ชัน 'ตัวช่วยสร้าง' ของ Ie ทำให้การใช้งานง่ายขึ้นนิดหน่อย แบบฟอร์มบนเว็บทำได้ดีในการซ่อนความซับซ้อนนั้นไว้มากมายจากนักพัฒนา
  • การพัฒนาแอปพลิเคชันอย่างรวดเร็ว (RAD) •ความสามารถในการ 'กระโดด' และเริ่มส่งแบบฟอร์มเว็บ สิ่งนี้ถูกโต้แย้งโดยชุมชน MVC บางแห่ง แต่ถูกผลักดันโดย Microsoft ในที่สุดมันก็มาถึงระดับความเชี่ยวชาญของนักพัฒนาและสิ่งที่พวกเขาพอใจ รูปแบบเว็บฟอร์มอาจมีเส้นโค้งการเรียนรู้น้อยลงสำหรับนักพัฒนาที่มีประสบการณ์น้อยกว่า
  • กล่องเครื่องมือควบคุมที่ใหญ่ขึ้น • ASP.NET Web Forms มอบกล่องเครื่องมือ (เว็บคอนโทรล) ที่มีประสิทธิภาพมากขึ้นและในขณะที่ MVC มีชุดควบคุมแบบดั้งเดิมที่ต้องอาศัยการควบคุมฝั่งไคลเอ็นต์ที่หลากหลายผ่าน jQuery (Javascript)
  • แก่แล้ว •มีมาตั้งแต่ปี 2002 และมีข้อมูลมากมายที่เกี่ยวข้องกับคำถามปัญหา ฯลฯ ให้การควบคุมของบุคคลที่สามมากขึ้น - ต้องพิจารณาชุดเครื่องมือที่มีอยู่ของคุณ

ASP.NET MVC:

  • การแยกข้อกังวล (SoC) •จากมุมมองทางเทคนิคการจัดระเบียบโค้ดภายใน MVC นั้นสะอาดจัดระเบียบและละเอียดทำให้ง่ายขึ้น (หวังว่า) สำหรับเว็บแอปพลิเคชัน ส่งเสริมการออกแบบที่ยอดเยี่ยมจากมุมมองการพัฒนา
  • การรวมที่ง่ายขึ้นกับเครื่องมือด้านไคลเอ็นต์ (เครื่องมือส่วนต่อประสานผู้ใช้ที่หลากหลาย) •แอปพลิเคชันเว็บเพิ่มมากขึ้นเรื่อย ๆ เช่นเดียวกับแอปพลิเคชันที่คุณเห็นบนเดสก์ท็อปของคุณ ด้วย MVC จะช่วยให้คุณสามารถรวมเข้ากับชุดเครื่องมือดังกล่าว (เช่น jQuery) ได้อย่างง่ายดายและราบรื่นกว่าในเว็บฟอร์ม
  • การเพิ่มประสิทธิภาพกลไกค้นหา (SEO) เป็นมิตร / ไร้สัญชาติ • URL นั้นเป็นมิตรกับเครื่องมือค้นหามากกว่า (เช่น mywebapplication.com/users/ 1) - ดึงผู้ใช้ด้วย ID 1 เทียบกับ mywebapplication / users / getuser.aspx (รหัสผ่านในเซสชัน)) ในทำนองเดียวกันเนื่องจาก MVC ไร้สัญชาติสิ่งนี้จะลบอาการปวดหัวของผู้ใช้ที่วางไข่หลายเว็บเบราว์เซอร์จากหน้าต่างเดียวกัน (การชนเซสชัน) ตามบรรทัดเดียวกันเหล่านั้น MVC ยึดมั่นกับเว็บโปรโตคอลไร้สัญชาติแทนที่จะ 'ต่อสู้กับมัน'
  • ทำงานได้ดีกับนักพัฒนาที่ต้องการการควบคุมระดับสูงการควบคุมหลายอย่างในเว็บฟอร์ม ASP.NET จะสร้าง HTML แบบดิบๆที่คุณเห็นเมื่อแสดงผลหน้าเว็บโดยอัตโนมัติ สิ่งนี้อาจทำให้ปวดหัวสำหรับนักพัฒนา ด้วย MVC มันให้ยืมตัวเองที่ดีกว่าในการควบคุมอย่างสมบูรณ์กับสิ่งที่แสดงผลและไม่มีความประหลาดใจ ที่สำคัญยิ่งกว่านั้นคือโดยทั่วไปแล้วรูปแบบ HTML จะเล็กกว่าแบบฟอร์มบนเว็บซึ่งสามารถเทียบได้กับการเพิ่มประสิทธิภาพซึ่งเป็นสิ่งที่ต้องพิจารณาอย่างจริงจัง
  • การทดสอบการพัฒนาที่ขับเคลื่อนด้วย (TDD) •ด้วย MVC คุณสามารถสร้างการทดสอบสำหรับสิ่งต่าง ๆ บนเว็บได้ง่ายขึ้น ชั้นของการทดสอบเพิ่มเติมจะให้การป้องกันอีกชั้นหนึ่งต่อพฤติกรรมที่ไม่คาดคิด

การพิสูจน์ตัวตนการอนุญาตการกำหนดค่าการรวบรวมและการปรับใช้เป็นคุณลักษณะทั้งหมดที่ใช้ร่วมกันระหว่างสองเฟรมเวิร์กเว็บ


27
"ด้วย MVC คุณสามารถควบคุมสิ่งที่แสดงผลได้อย่างสมบูรณ์" - คุณยังสามารถควบคุมได้อย่างสมบูรณ์ด้วย WebForms หากคุณใช้ตัวอักษรแทนป้ายกำกับตัวยึดแทนแผงควบคุมผู้ทำซ้ำแทน Datagrids ฯลฯ นักพัฒนาจำนวนมากอ่านข้อความเช่นนี้และ เชื่อว่ามันจะเป็นจริง Downvote ..
ต.ค.

3
@masty - ฉันไม่รู้ว่าฉันจะลงคะแนนเป็นการส่วนตัว แต่ฉันเห็นด้วยกับส่วนที่เหลือของสิ่งที่คุณพูด
ปีเตอร์

4
@masty - ขอบคุณสำหรับการบันทึกโลก StackOverflow โดย nitpicking และถามว่าคำถามนี้จะลดลง ฉันแก้ไขคำตอบของฉันเพียงเพื่อคุณ - ดังนั้นหวังว่าฉันจะได้รับคะแนนของคุณกลับมาพร้อมกับคนอื่น ๆ ที่คุณขอให้โหวตมัน ขอบคุณ!
JC

6
@masty ฉันเห็นด้วยบางส่วน แต่เมื่อใช้ตัวอักษรตัวยึดตำแหน่งและตัวทำซ้ำคุณจะย้าย html ไปที่โค้ดบีดอินมากขึ้นเรื่อย ๆ ซึ่งยังอาจทำให้เกิดความสับสนกับนักออกแบบที่อ่าน. aspx และผู้เขียนโค้ดที่อ่าน. aspx.cs ดังนั้นใช่เป็นไปได้ แต่ใช่มันยังเอาชนะวัตถุประสงค์ของ ASP.Net WebForms ฉันจะบอกว่า ControlAdapters เป็นโซลูชั่นที่สะอาดกว่าในกรณีนั้น แทนที่จะเปลี่ยนการควบคุมคุณแทนที่วิธีการแสดงผล
Aidiakapi

2
คำสั่ง "ด้วย MVC คุณสามารถควบคุมสิ่งที่แสดงผลได้อย่างสมบูรณ์" สับสน ฉันคิดว่าข้อความที่ดีกว่านี้ก็คือ "กรอบการทำงานของ MVC ช่วยให้การเรนเดอร์น้อยลงและสิ่งที่เรนเดอร์น้อยกว่าคุณสามารถควบคุม HTML / CSS เฉพาะที่แสดงผลได้ แต่คุณต้องทำงานเพื่อให้ได้การควบคุมนั้น"
kingdango

17

ใคร ๆ ที่อายุมากพอที่จะจำ ASP แบบคลาสสิคจะจำฝันร้ายของการเปิดหน้าเว็บที่มีโค้ดที่ปะปนอยู่กับ html และ javascript - แม้แต่หน้าที่เล็กที่สุดก็เป็นความเจ็บปวดที่จะรู้ว่ามันทำอะไรอยู่ ฉันอาจจะผิดและฉันหวังว่าฉัน แต่ MVC ดูเหมือนจะย้อนกลับไปยังวันเก่าที่ไม่ดีเหล่านั้น

เมื่อ ASP.Net เข้ามามันได้รับการยกย่องว่าเป็นผู้ช่วยให้รอดการแยกโค้ดออกจากเนื้อหาและทำให้เรามีนักออกแบบเว็บไซต์สร้าง html และ coders ทำงานบนโค้ดด้านหลัง หากเราไม่ต้องการใช้ ViewState เราก็ปิดการใช้งาน หากเราไม่ต้องการใช้โค้ดด้านหลังด้วยเหตุผลบางอย่างเราสามารถวางโค้ดของเราไว้ใน html ได้เหมือนกับ ASP คลาสสิก หากเราไม่ต้องการใช้ PostBack เราจะเปลี่ยนเส้นทางไปยังหน้าอื่นเพื่อการประมวลผล หากเราไม่ต้องการใช้การควบคุม ASP.Net เราก็ใช้การควบคุม html มาตรฐาน เราสามารถสอบถามวัตถุการตอบสนองได้หากเราไม่ต้องการใช้ ASP.Net runat = "server" ในส่วนควบคุมของเรา

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

ถ้าฉันต้องการกลับไปที่การผสมโค้ดกับเนื้อหาฉันจะดูการพัฒนาโดยใช้ PHP ซึ่งมีสภาพแวดล้อมที่เป็นผู้ใหญ่มากขึ้นสำหรับการพัฒนาแบบนั้น หากมีปัญหามากมายกับ ASP.NET ทำไมไม่แก้ไขปัญหาเหล่านั้น?

สุดท้าย แต่ไม่ท้ายสุดเครื่องยนต์ของมีดโกนนั่นหมายความว่าเป็นการยากที่จะแยกแยะระหว่าง html และรหัส อย่างน้อยเราสามารถมองหาแท็กเปิดและปิดเช่น <% และ%> ใน ASP แต่ตอนนี้สิ่งบ่งชี้เพียงอย่างเดียวคือสัญลักษณ์ @

อาจถึงเวลาย้ายไปที่ PHP และรออีก 10 ปีเพื่อให้ผู้อื่นแยกรหัสจากเนื้อหาอีกครั้ง


7
+1 เปิด ปฏิกิริยาแรกของฉันต่อ MVC คือฉันกำลังทำ Classic ASP อยู่อีกครั้ง เฉพาะใน C # ในเวลานี้แทน VBScript
DancesWithBamboo

3
ฉันประหลาดใจที่ทำไมคำตอบนี้มี upvotes มากมาย ประการแรก ASP.NET MVC มีการแยก MVC ไว้ในตัวแน่นอนว่าคุณสามารถทำได้ใน ASP ประการที่สอง ASP.NET MVC เป็นมากกว่า ASP ดั้งเดิม มันให้การควบคุมอย่างละเอียดยิ่งกว่า HTML รวมกับพลังของ. NET พร้อมกับผู้ช่วยที่มีประโยชน์มากมาย ประการที่สาม @ เป็นสัญลักษณ์ที่ดีเช่นเดียวกับ <%%> เครื่องมือแก้ไขที่เหมาะสมสำหรับมุมมองมีดโกนของคุณจะรองรับเครื่องหมาย @ - สุดท้าย PHP เป็นผู้ใหญ่แล้วหรือ me.veekun.com/blog/2012/04/09/php-a-fractal-of-bad-design ASP.NET MVC เป็นแพลตฟอร์มที่ยอดเยี่ยม ให้ความสนใจมากขึ้น
JP ten Berge

คุณล้อเล่นกับฉันไหม ฉันใช้ PHP พร้อมสัญกรณ์ "<? ... ?>" และพบว่าเป็น verbose อย่างเต็มที่ ฉันไม่เห็นว่าสัญลักษณ์ "@" นั้นจดจำได้ยากกว่าแท็ก "<% ... %>" รวมถึงคุณไม่ค่อยใช้สัญลักษณ์ "@" ในเทมเพลต HTML
อรรถกถา

ดวงตาของฉันสามารถพักผ่อนได้ดีกว่าบนหน้ามีดโกนมากกว่าบนสัญลักษณ์ "<%%>" การอ่านหน้า. aspx ทำให้ฉันปวดหัว ฉันยังต้องการที่จะเห็นสิ่งที่จะแสดงผล บล็อก @foreach (.. ) {<tr> ... </tr>} ทำให้ฉันรู้สึกสบายใจกว่า <abc: MyViewControl ID = "... " runat = "เซิร์ฟเวอร์" DatasourceID = ".... "/> ฉันทำการปรับแต่งด้านไคลเอนต์จำนวนมากและฉันจำเป็นต้องรู้ว่าอะไรจะเกิดขึ้นที่ไหนและด้วย id สไตล์และคลาสใด ฉันชอบที่จะทำเองมากกว่าปล่อยให้ผู้ควบคุมทำมันได้ทันที โดยเฉพาะอย่างยิ่งเมื่อตัวควบคุมบางตัวแสดงผลแตกต่างกันไปตามการตั้งค่า
Thanasis Ioannidis

ฉันประหลาดใจที่มี upvotes มันเป็นความเข้าใจผิดที่สมบูรณ์ของกรอบ MVC หากคุณพบว่าตัวเองผสมรหัสกับเนื้อหาใน MVC แสดงว่าคุณทำผิด มุมมองของคุณมีเนื้อหาตัวควบคุม (และคลาสที่ใช้) มีรหัส มันเป็นหนึ่งในหลักการเบื้องต้นของ MVC
Josh Noe

14

หากคุณกำลังทำงานกับนักพัฒนาอื่น ๆ เช่น PHP หรือ JSP (และฉันกำลังคาดเดาราง) - คุณจะมีเวลามากขึ้นในการแปลงหรือทำงานร่วมกันบนหน้าเว็บได้ง่ายขึ้นเพราะคุณไม่มี ASP.NET ที่น่ารังเกียจทั้งหมด กิจกรรมและการควบคุมทุกที่


"เวลาง่ายขึ้นมาก" โดยใช้อันไหน
cregox

5
@cawas - ง่ายขึ้นด้วย MVC ไม่มีเหตุการณ์ใน ASP.NET MVC โดยทั่วไปคุณกำลังจัดการกับ HTML และ css แบบมาตรฐานและไม่มีเหตุการณ์และการควบคุมมากมายที่นักพัฒนา PHP / JSP จะต้องเรียนรู้
Simon_Weaver

ASP.NET เป็นพื้นฐานสำหรับทั้ง WebForms และ MVC คนมักจะสับสน WebForms กับ ASP.NET ไม่มี "MVC กับ ASP.NET" มี "ASP.NET MVS" เทียบกับ "ASP.NET WebForms" และแท้จริงแล้วพวกเขาไม่ได้ต่อสู้ซึ่งกันและกัน พวกเขาเป็นเพียงวิธีที่แตกต่างกับข้อดีและข้อเสียที่แตกต่างกันในการสร้างเว็บไซต์
Thanasis Ioannidis

13

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


1
+1 สำหรับธุรกิจได้รับแรงหนุนจากสิ่งพื้นฐาน "วิธีแก้ปัญหาด่วนที่ใช้งานได้"
Dragos Durlut

1
ปัญหาคือเมื่อการแก้ปัญหาอย่างรวดเร็วเพียงไม่ทำงานเพราะพวกเขาตั้งใจที่จะรวดเร็วในสถานที่แรก ประสบการณ์ล่าสุด: หน้าเว็บฟอร์มด่วนเพื่อทำการสร้างการแก้ไขพื้นฐาน มันควรจะเป็น "เร็วขึ้น" กว่าหน้า equiveland infopath ซึ่งค่อนข้างช้า ที่จริงแล้วโซลูชั่นใหม่นั้นมีประสิทธิภาพเกือบเหมือนกันกับหน้า infopath ยกเว้นใน IE7 เพราะมันช้าลงอย่างมากจนถึงจุดที่ไร้ประโยชน์ 5 วินาทีเพื่อเปิดหน้าและ 5 วินาทีในแต่ละครั้งที่มีการคลิก combobox ... ทั้งหมดนั้นเพียงเพราะมันต้องรวดเร็ว ไม่มีความคิดไม่มีการวางแผน
Thanasis Ioannidis

1
หลังจากนั้นเราลงเอยด้วยการลบการควบคุมทั้งหมดเพื่อกำจัดสคริปต์ฝั่งไคลเอ็นต์ที่ไม่จำเป็นและหนักหน่วงและจบการแสดงผลการควบคุม html แบบแมนนวลโดยใช้ข้อมูลและเหตุการณ์ bootstrapped และการรวมกันของ jQuery และ BackBone.js จริงๆแล้วมันเป็นวิธี MVC ที่โฮสต์ในหน้าเว็บฟอร์ม แน่นอนว่าด้วยความดีและการวางแผน WebForms และ MVC สามารถทำได้ดีมาก แต่ WebForms ล่อลวงให้คุณเพียงแค่โยนการควบคุมในหน้าเว็บของคุณเพื่อดูว่ามีการเคลื่อนไหวบนหน้าจอแล้วและคุณใช้เวลามากขึ้นในการ tweaking เลย
Thanasis Ioannidis

11
  1. AJAX ที่เหมาะสมเช่น JSONResults ไม่มีส่วนหลัง postback ไร้สาระบางส่วน
  2. ไม่มีวิวรัฐ +1
  3. ไม่มีการเปลี่ยนชื่อ HTML ID
  4. ล้าง HTML = ไม่มีการขยายและให้ภาพที่เหมาะสมในการแสดง XHTML หรือหน้าเว็บที่เป็นไปตามมาตรฐาน
  5. ไม่มีจาวาสคริปต์ AXD สร้างขึ้นอีก

9

ข้อได้เปรียบเดียวที่ใหญ่ที่สุดสำหรับฉันคือการแยกที่ชัดเจนระหว่างเลเยอร์ Model, View และ Controller ของคุณ ช่วยส่งเสริมการออกแบบที่ดีตั้งแต่เริ่มต้น


4
ฉันยอมรับว่านี่เป็นจุดขายสำคัญหากคุณไม่เคยทำงานกับรูปแบบประเภทนี้มาก่อน แต่คุณสามารถใช้รูปแบบ MVC หรือ MVP ใน WebForms ได้ ความรุ่งโรจน์สำหรับการทำให้ผู้คนเปลี่ยนไปใช้รูปแบบมากกว่าที่จะ monolithing webform ด้วยชุดข้อมูล แต่พวกเขาก็ไม่ได้เป็นประเภทของคนที่ฉันจ้างโดยทั่วไป
Mark Broadhurst

9

ฉันไม่เห็นข้อได้เปรียบใด ๆ ใน MVC ผ่าน ASP.Net 10 ปีที่แล้ว Microsoft มาพร้อมกับ UIP (User Interface Process) เป็นคำตอบของ MVC มันเป็นความล้มเหลว เราทำโครงการขนาดใหญ่ (นักพัฒนา 4 คนนักออกแบบ 2 คนผู้ทดสอบ 1 คน) ด้วย UIP ในตอนนั้นและมันก็เป็นฝันร้ายที่แท้จริง

อย่าเพิ่งกระโดดเข้าไปที่ bandwagon เพื่อประโยชน์ของ Hype ข้อดีทั้งหมดที่กล่าวมาข้างต้นนั้นมีอยู่ใน Asp.Net (ด้วย tweaks ที่ยอดเยี่ยมมากขึ้น [ คุณสมบัติใหม่ใน Asp.Net 4 ] ใน Asp.Net 4)

หากทีมพัฒนาของคุณหรือครอบครัวนักพัฒนาเดียวที่มี Asp.Net เพียงติดกับมันและสร้างผลิตภัณฑ์ที่สวยงามได้อย่างรวดเร็วเพื่อตอบสนองลูกค้าของคุณ (ที่จ่ายสำหรับชั่วโมงทำงานของคุณ) MVC จะกินเวลาอันมีค่าของคุณและสร้างผลลัพธ์เช่นเดียวกับ Asp.Net :-)


1
การปิดใช้งาน viewstate โดยค่าเริ่มต้นในขณะที่เปิดใช้งานการควบคุมเป็นครั้งคราวซึ่งจริง ๆ แล้วมันเป็นขั้นตอนที่ยอดเยี่ยมใน ASP.NET 4
PeteT

ทั้ง WebForms และ MVC ถูกสร้างขึ้นบน ASP.NET
Thanasis Ioannidis

8

Francis Shanahan

  1. ทำไมคุณถึงเรียกว่า postback บางส่วนว่า "ไร้สาระ" นี่เป็นคุณสมบัติหลักของ Ajax และถูกใช้อย่างดีในกรอบ Atlas และการควบคุมโดยบุคคลที่สามอย่าง Telerik

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

  3. เฉพาะการควบคุมเซิร์ฟเวอร์ HTML เท่านั้นที่ถูกเปลี่ยนชื่อในรูปแบบ ASP.NET Web Form และไม่ใช่การควบคุม html บริสุทธิ์ ไม่ว่าคุณจะทำอะไรทำไมคุณกังวลมากถ้าเปลี่ยนชื่อเสร็จ ฉันรู้ว่าคุณต้องการจัดการกับเหตุการณ์จาวาสคริปต์ในฝั่งไคลเอ็นต์ แต่ถ้าคุณออกแบบหน้าเว็บของคุณอย่างชาญฉลาดคุณจะได้รับรหัสทั้งหมดที่คุณต้องการอย่างแน่นอน

  4. แม้แต่ ASP.NET Web Forms ก็ตรงตามมาตรฐาน XHTML และฉันก็ไม่เห็น bloating นี่ไม่ใช่เหตุผลว่าทำไมเราถึงต้องใช้รูปแบบ MVC

  5. อีกครั้งทำไมคุณถึงต้องกังวลกับ AXD Javascript ทำไมมันเจ็บคุณ นี่ไม่ใช่เหตุผลที่ถูกต้องอีกครั้ง

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

ข้อเสียที่ใหญ่ที่สุดของ MVC คือเราจะย้อนกลับไปสู่ยุคของ ASP จำสปาเก็ตตี้ในการผสมรหัสเซิร์ฟเวอร์และ HTML ??? โอ้พระเจ้าลองอ่านหน้า MVC aspx ผสมกับ javascript, HTML, JQuery, CSS, แท็กเซิร์ฟเวอร์และสิ่งที่ไม่ .... ร่างกายใด ๆ ที่สามารถตอบคำถามนี้?


6
postbacks บางส่วนเป็น kludge ที่น่าเกลียด
UpTheCreek

3
หากคุณมีรหัสจำนวนมากในมุมมองของคุณแสดงว่าคุณกำลังทำอะไรผิดพลาด รหัสในมุมมองควรเกี่ยวข้องกับเค้าโครงเท่านั้น
UpTheCreek

1
เหตุผลเดียวที่คุณจะเห็นหน้าเว็บที่มีจาวาสคริปต์ปะปนอยู่กับ css และ html คือถ้าคุณดูที่งานของนักพัฒนาที่ขี้เกียจซึ่งไม่สามารถแยกสไตล์และสคริปต์ที่แยกออกจากกันได้ สิ่งนี้สามารถเกิดขึ้นได้ในเว็บฟอร์มและ mvc ผมเห็นด้วยแท็กสคริปต์ที่น่าเกลียด แต่มี MVC3 พวกเขาแน่ใจว่า Aint ไม่มากและอย่างน้อยคุณสามารถมองเห็นสิ่งที่เกิดขึ้นโดยไม่ได้มองในรหัสที่อยู่เบื้องหลังไฟล์และหาจุดที่ควบคุม databound ...
jcvandan

นอกจากนี้หากคุณกำลังสร้างรหัสสปาเก็ตตี้โดยใช้ MVC คุณไม่ยึดมั่นในการแยกความกังวลหลักและไม่ได้ใช้รูปแบบสถาปัตยกรรมที่ดี
jcvandan

1
เมื่อใช้ทั้งคู่ฉันสามารถพูดได้ว่าไม่มีสิ่งใดที่จะยุ่งไปกว่า WebForms MVC สะอาดยกเว้นแท็กเซิร์ฟเวอร์ แต่นอกเหนือจากนั้นระเบียบทั้งหมดเป็นความผิดของโปรแกรมเมอร์ที่ไม่ดี MVC ถูกออกแบบโดยแกนหลักเพื่อแยกตรรกะออกจากการออกแบบ นอกจากนี้คุณพูดถึง Telerik Telerik สำหรับ ASP.Net AJAX ทำให้เกิดรหัสยุ่ง ไม่ต้องพูดถึงความเร็ว (คน) การเรียงลำดับกริด telerik ใช้เวลา: 500ms สำหรับ 4 หน้าใน ASP.Net WebForms ใช้เวลา 200ms สำหรับ 84 หน้าใน MVC (ทดสอบโดยใช้การสาธิตและ firebug สำหรับ chrome) เมื่อพูดถึงประสิทธิภาพและการแยก MVC ชนะแน่นอน
Aidiakapi

6

แบบฟอร์มบนเว็บยังได้รับจากความเป็นผู้ใหญ่ที่มากขึ้นและการสนับสนุนจากผู้ให้บริการควบคุมบุคคลที่สามเช่น Telerik


2
ไม่ได้บอกว่ามันไม่สามารถทำได้กับ MVC เพราะฉันแน่ใจว่ามันมี แต่ถ้าคุณต้องการตบแอปอินทราเน็ตหรือเอ็กซ์ทราเน็ตที่สกปรกและรวดเร็วด้วย Telerik และ WebForms จำนวนมากนั้นยากที่จะเอาชนะ ออกไป 'เป็นความจริงที่ซื่อสัตย์
infocyde

Telerik มีการควบคุม MVC ด้วย (น้อยกว่าและมีตัวเลือกน้อยลง แต่ก็ยังมี) และพวกเขาก็เร็วกว่า WebForm ที่หลากหลาย
Aidiakapi

5

ในเว็บฟอร์มคุณสามารถแสดง html เกือบทั้งหมดด้วยมือยกเว้นแท็กบางรายการเช่น viewstate, eventvalidation และที่คล้ายกันซึ่งสามารถลบออกได้ด้วย PageAdapters ไม่มีใครบังคับให้คุณใช้ GridView หรือการควบคุมฝั่งเซิร์ฟเวอร์อื่น ๆ ที่มีเอาต์พุตการแสดงผล html ที่ไม่ดี

ฉันจะบอกว่าประโยชน์ที่ใหญ่ที่สุดของ MVC คือความเร็ว!

ถัดไปคือการแยกความกังวลออกจากกัน แต่มันไม่ได้ห้ามคุณใส่ตรรกะ BL และ DAL ทั้งหมดใน Controller / Action! เป็นเพียงการแยกมุมมองซึ่งสามารถทำได้ในเว็บฟอร์ม (ตัวอย่างรูปแบบ MVP) หลายสิ่งหลายอย่างที่ผู้คนกล่าวถึง mvc สามารถทำได้ในเว็บฟอร์ม แต่ด้วยความพยายามเพิ่มเติม
ข้อแตกต่างที่สำคัญคือคำขอมาถึงตัวควบคุมไม่ใช่มุมมองและทั้งสองเลเยอร์ถูกแยกออกไม่เชื่อมต่อผ่านคลาสบางส่วนเช่นในเว็บฟอร์ม (aspx + โค้ดด้านหลัง)


คุณหมายถึงความเร็วในการพัฒนาหรือความเร็วในการทำงานหรือไม่?
จูลส์

1
โดยเฉพาะอย่างยิ่งเมื่อใช้ telerik กับ MVC จากการสาธิตการเรียงลำดับใช้เวลา: 500ms สำหรับ 4 หน้า (WebForms), 200ms สำหรับ 84 หน้า (MVC) สำหรับฉันสิ่งที่ชอบของ MVC (แม้ว่าเราใช้ WebForms ที่ บริษัท ของฉันคิดว่าเรากำลังพิจารณาที่จะเปลี่ยน) ก็คือมันสะอาดกว่าคุณมีมุมมองของคุณที่คุณปรับเอาท์พุทแบบจำลองของคุณ ตั้งค่าข้อมูล: P และผู้ควบคุมของคุณที่รวมมันเข้าด้วยกัน
Aidiakapi

4

2 เซนต์ของฉัน:

  • ฟอร์ม ASP.net นั้นยอดเยี่ยมสำหรับการพัฒนาแอปพลิเคชันอย่างรวดเร็วและเพิ่มมูลค่าทางธุรกิจอย่างรวดเร็ว ฉันยังคงใช้มันสำหรับแอปพลิเคชันอินทราเน็ตส่วนใหญ่
  • MVC เหมาะอย่างยิ่งสำหรับการเพิ่มประสิทธิภาพกลไกค้นหาขณะที่คุณควบคุม URL และ HTML ในระดับที่สูงขึ้น
  • โดยทั่วไปแล้ว MVC จะสร้างหน้าเว็บที่เพรียวบางมากขึ้น - ไม่มีมุมมองและ HTML ที่สะอาด = เวลาในการโหลดที่รวดเร็ว
  • MVC ง่ายต่อการแคชบางส่วนของหน้า -MVC สนุกกับการเขียน: - ความเห็นส่วนตัว ;-)

3

MVC ช่วยให้คุณมีมากกว่าหนึ่งรูปแบบบนหน้าเว็บคุณสมบัติเล็ก ๆ ที่ฉันรู้ แต่มันมีประโยชน์!

อีกทั้งรูปแบบ MVC ที่ฉันรู้สึกว่าทำให้รหัสง่ายต่อการดูแลรักษา เมื่อคุณกลับมาอีกครั้งหลังจากไม่กี่เดือน


2
ASP.NET Webforms ช่วยให้คุณมีฟอร์มได้มากเท่าที่ต้องการ ข้อ จำกัด คือว่ามีเพียงหนึ่งสามารถมี "runat =" แอตทริบิวต์เซิร์ฟเวอร์".
อังเดรRînea

1
@AndreiRinea ฉันคิดว่าเขาหมายถึงว่า: P มีการใช้งานไม่มากนักในrunat="server"แท็กที่ไม่ใช่รูปแบบเมื่อคุณยังต้องการใช้เว็บฟอร์มและเนื่องจากคุณไม่สามารถ / ไม่ควรทำแบบฟอร์มฉันคิดว่ามันชัดเจนว่าเขาหมายถึงอะไร :)
Aidiakapi

2

ตัวควบคุม MVC:

    [HttpGet]
    public ActionResult DetailList(ImportDetailSearchModel model)
    {
        Data.ImportDataAccess ida = new Data.ImportDataAccess();
        List<Data.ImportDetailData> data = ida.GetImportDetails(model.FileId, model.FailuresOnly);

        return PartialView("ImportSummaryDetailPartial", data);
    }

มุมมอง MVC:

<table class="sortable">
<thead>
    <tr><th>Unique Id</th><th class="left">Error Type</th><th class="left">Field</th><th class="left">Message</th><th class="left">State</th></tr>
</thead>
<tbody>
    @foreach (Data.ImportDetailData detail in Model)
    {
    <tr><th>@detail.UniqueID</th><th class="left">@detail.ErrorType</th><th class="left">@detail.FieldName</th><th class="left">@detail.Message</th><th class="left">@detail.ItemState</th></tr>
    }
</tbody></table>

นั่นเป็นวิธีที่ยาก? ไม่มี ViewState ไม่มี BS วงจรชีวิต ... รหัสที่มีประสิทธิภาพล้วนๆ


1

ฉันเห็นข้อดีเพียงสองข้อสำหรับเว็บไซต์ขนาดเล็กที่มีอยู่: 6) URL ที่สงบซึ่งเปิดใช้งาน SEO 7) ไม่มีเหตุการณ์ ViewState และ PostBack (และประสิทธิภาพที่ดีขึ้นโดยทั่วไป)

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

ฉันเห็นข้อดีของ MVC อย่างชัดเจนในเว็บไซต์ที่มีผู้พัฒนาหลายรายขนาดใหญ่


1

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

Webforms และ MVC เป็นทั้งเครื่องมือที่ทำงานได้ดีทั้งในด้านต่าง ๆ

ฉันใช้แบบฟอร์มบนเว็บเป็นการส่วนตัวในขณะที่เราพัฒนาแอพ B2B / LOB เป็นหลัก แต่เรามักจะทำด้วยรูปแบบ MVP ด้วยซึ่งเราสามารถบรรลุความครอบคลุมโค้ด 95 +% สำหรับการทดสอบหน่วยของเรา สิ่งนี้ยังช่วยให้เราทำการทดสอบคุณสมบัติของค่าคุณสมบัติของเว็บคอนโทรลโดยอัตโนมัติผ่านมุมมองเช่น

bool IMyView.IsAdminSectionVisible{
       get{return pnlAdmin.Visible;}
       get{pnlAdmin.Visible=value;}
    }

) ฉันไม่คิดว่าการทดสอบระดับนี้สามารถทำได้ง่ายใน MVC โดยไม่ต้องสร้างโมเดลของฉัน


0

คุณไม่รู้สึกแย่กับการใช้ 'non-post-back controls' อีกต่อไป - และหาวิธีที่จะทำให้หน้าจอเหล่านั้นเป็นสภาพแวดล้อม asp.net แบบดั้งเดิม

ซึ่งหมายความว่าการควบคุมจาวาสคริปต์ที่ทันสมัย ​​(ใช้งานฟรี) เช่นนี้หรือสิ่งนี้หรือสิ่งนี้สามารถใช้งานได้โดยไม่ต้องพยายามปรับหมุดกลมให้เป็นรูสี่เหลี่ยม


0

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


0

ความคิดเห็นส่วนตัวของฉันคือว่าข้อได้เปรียบที่ใหญ่ที่สุดในการใช้ ASP.Net MVC นั้นCODE BLOCKSผสมกับHTML...
html hell สำหรับนักพัฒนาที่ดูแลมัน ...

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