คำถามติดแท็ก asp.net-mvc

ASP.NET MVC Framework เป็นเฟรมเวิร์กแอปพลิเคชันเว็บของ Microsoft ที่ใช้รูปแบบ model-view-controller (MVC)

2
แนวทางปฏิบัติที่ดีที่สุดสำหรับสถาปัตยกรรม MVC [ปิด]
คำถามของฉันเกี่ยวกับวิธีการออกแบบแอปพลิเคชั่น MVC ตัวอย่างเช่นเราได้รับการสนับสนุนให้ใช้ DI กับรูปแบบ Repository เพื่อแยกการเข้าถึงข้อมูลจากคอนโทรลเลอร์อย่างไรก็ตามมีการพูดถึงวิธีการทำเช่นนั้นโดยเฉพาะสำหรับ MVC น้อยมาก เราจะวางคลาส Repository ไว้ที่ไหน ดูเหมือนว่าพวกเขาจะไม่เกี่ยวข้องกับรูปแบบเฉพาะเนื่องจากรูปแบบที่ควรจะแยกออกจากเทคโนโลยีการเข้าถึงข้อมูลที่เกิดขึ้นจริง คำถามที่สองเกี่ยวข้องกับวิธีการจัดโครงสร้างเลเยอร์หรือชั้น แอปพลิเคชันตัวอย่างส่วนใหญ่ (อาหารค่ำ Nerd, Music Store และอื่น ๆ ) ทั้งหมดดูเหมือนจะใช้วิธีชั้นเดียวแบบ 2 ชั้น (ไม่นับการทดสอบ) ซึ่งโดยทั่วไปจะมีตัวควบคุมที่เรียกรหัส L2S หรือ EF โดยตรง หากฉันต้องการสร้างแอปพลิเคชันหลายชั้น / เลเยอร์แนวทางปฏิบัติที่ดีที่สุดที่เกี่ยวข้องกับ MVC คืออะไร

1
เรียกใช้ฟังก์ชั่นและไม่ต้องรอใน C #
ฉันมีคอนโทรลเลอร์ในแอปพลิเคชันเว็บ mvc4 ซึ่งมีการดำเนินการที่ต้องเรียกใช้ฟังก์ชันอื่น จะเกิดอะไรขึ้นในฟังก์ชั่นนั้นเช่นค่าตอบแทนไม่สำคัญสำหรับการกระทำของฉัน ฉันจะเรียกฟังก์ชั่นนั้นและไม่ต้องรอให้มันทำงานได้อย่างไร? ฉันคิดว่ามันสามารถทำได้โดย async แต่ประเด็นของฉันคือไม่ใช้ทรัพยากรเพียงแค่เรียกใช้ฟังก์ชั่นและไม่ต้องรอสิ่งที่เคยเกิดขึ้น โปรดให้คำแนะนำแก่ฉัน
26 c#  .net  asp.net  asp.net-mvc 

6
ทำไมคุณจะ 'รอ' วิธีการแล้วถามค่าส่งคืนทันที
ในบทความ MSDN นี้มีการให้รหัสตัวอย่างต่อไปนี้ (แก้ไขเล็กน้อยเพื่อความกะทัดรัด): public async Task<ActionResult> Details(int? id) { if (id == null) { return new HttpStatusCodeResult(HttpStatusCode.BadRequest); } Department department = await db.Departments.FindAsync(id); if (department == null) { return HttpNotFound(); } return View(department); } FindAsyncวิธีการดึงDepartmentวัตถุโดยใช้ ID Task<Department>ของตนและผลตอบแทน จากนั้นแผนกจะถูกตรวจสอบทันทีเพื่อดูว่าเป็นโมฆะหรือไม่ ตามที่ฉันเข้าใจแล้วการขอค่าของภารกิจในลักษณะนี้จะบล็อกการเรียกใช้โค้ดจนกว่าจะส่งคืนค่าจากเมธอดที่รอคอยซึ่งส่งคืนการโทรแบบซิงโครนัสอย่างมีประสิทธิภาพ ทำไมคุณถึงทำเช่นนี้? มันจะง่ายกว่าFind(id)ไหมถ้าจะเรียกวิธีการซิงโครนัสถ้าคุณจะบล็อกทันทีล่ะ?
24 c#  .net  asp.net-mvc  async 

3
เหตุใดฉันจึงควรใช้รายการ <T> บน IEnumerable <T>
ในแอปพลิเคชันเว็บ ASP.net MVC4 ของฉันฉันใช้ IEnumerables พยายามติดตามมนต์เพื่อเขียนโปรแกรมไปยังส่วนต่อประสานไม่ใช่เพื่อการนำไปใช้ Return IEnumerable(Of Student) VS Return New List(Of Student) มีคนบอกให้ฉันใช้ List และไม่ใช่ IEnumerable เพราะรายการบังคับให้แบบสอบถามดำเนินการและ IEumerable ไม่ นี่เป็นวิธีปฏิบัติที่ดีที่สุดจริง ๆ หรือ มีทางเลือกอื่นอีกไหม? ฉันรู้สึกแปลก ๆ ที่ใช้วัตถุที่เป็นรูปธรรมซึ่งสามารถใช้ส่วนต่อประสาน ความรู้สึกแปลก ๆ ของฉันเป็นธรรมหรือไม่?

4
เหตุใดจึงต้องทดสอบการดู MVC
ขณะนี้ฉันกำลังตั้งค่าพื้นฐานสำหรับแอปพลิเคชัน ASP.Net MVC และฉันกำลังมองหาการทดสอบหน่วยที่ฉันควรเตรียมที่จะเขียน ฉันเคยเห็นในหลาย ๆ ที่ที่ผู้คนพูดว่า 'ไม่ต้องกังวลกับการทดสอบมุมมองของคุณไม่มีตรรกะและมันไม่สำคัญ ฉันไม่เข้าใจว่าสิ่งนี้กลายเป็นภูมิปัญญาที่ยอมรับได้อย่างไร การทดสอบการรวมเข้าด้วยกันนั้นมีจุดประสงค์ที่แตกต่างจากการทดสอบหน่วย ถ้าฉันทำบางสิ่งบางอย่างฉันไม่ต้องการที่จะรู้ว่าครึ่งชั่วโมงต่อมาเมื่อการทดสอบการรวมของฉันหยุดทำงานฉันอยากรู้ทันที สถานการณ์ตัวอย่าง: สมมติ ว่าเรากำลังติดต่อกับแอพ CRUD มาตรฐานกับเอนทิตีลูกค้า ลูกค้ามีชื่อและที่อยู่ ในการทดสอบแต่ละระดับฉันต้องการตรวจสอบว่าตรรกะการดึงข้อมูลลูกค้าได้รับทั้งชื่อและที่อยู่อย่างถูกต้อง เพื่อทดสอบหน่วยเก็บข้อมูลฉันเขียนการทดสอบการรวมระบบเพื่อตีฐานข้อมูล ในการทดสอบกฎธุรกิจฉันจำลองที่เก็บข้อมูลป้อนข้อมูลกฎธุรกิจที่เหมาะสมและตรวจสอบผลลัพธ์ที่คาดหวังของฉันคืน สิ่งที่ฉันต้องการทำ: ในการทดสอบ UI หน่วยฉันจำลองกฎธุรกิจตั้งค่าอินสแตนซ์ลูกค้าที่คาดหวังของฉันแสดงผลมุมมองและตรวจสอบว่ามุมมองมีค่าที่เหมาะสมสำหรับอินสแตนซ์ที่ฉันระบุ สิ่งที่ฉันทำอยู่: เพื่อทดสอบหน่วยเก็บข้อมูลฉันเขียนการทดสอบการรวมตั้งค่าการเข้าสู่ระบบที่เหมาะสมสร้างข้อมูลที่ต้องการในฐานข้อมูลเปิดเบราว์เซอร์นำทางไปยังลูกค้าและตรวจสอบหน้าผลลัพธ์ที่เหมาะสม ค่าสำหรับอินสแตนซ์ที่ฉันระบุ ฉันรู้ว่ามีการทับซ้อนกันระหว่างสองสถานการณ์ที่กล่าวข้างต้น แต่ความแตกต่างที่สำคัญเวลาและความพยายามที่จำเป็นในการตั้งค่าและดำเนินการทดสอบ หากฉัน (หรืออุปกรณ์อื่น) ลบฟิลด์ที่อยู่ออกจากมุมมองฉันไม่ต้องการรอให้การทดสอบการรวมระบบค้นพบสิ่งนี้ ฉันต้องการค้นพบและตั้งค่าสถานะในการทดสอบหน่วยที่ได้รับหลายครั้งต่อวัน ฉันรู้สึกว่าฉันไม่เข้าใจแนวคิดหลักบางอย่าง บางคนสามารถอธิบายได้หรือไม่ว่าทำไมการตอบรับการทดสอบในทันทีเกี่ยวกับความถูกต้องของมุมมอง MVC เป็นสิ่งที่ไม่ดี (หรือถ้าไม่เลวก็ไม่ใช่วิธีที่คาดหวังในการรับฟังความคิดเห็น)

2
แอปพลิเคชัน ASP.NET MVC ควรใช้ Entity Framework โดยตรงเป็นโมเดลหรือไม่
ฉันกำลังสร้างแอปพลิเคชัน MVC แรกของฉันใน Visual Studio 2013 (MVC 5) และฉันยังไม่ชัดเจนเกี่ยวกับวิธีที่ดีที่สุดในการตั้งค่าแบบจำลองของฉัน ฉันสร้างโมเดลเอนทิตี้ของเฟรมเวิร์กโดยใช้รหัส - แรกจากฐานข้อมูลที่มีอยู่ สัญชาตญาณแรกของฉันคือการสร้างคลาสตัวกลางที่จะเป็นโมเดลที่ใช้โดยมุมมองและให้คลาสเหล่านั้นทำงานกับคลาสเฟรมเวิร์กเอนทิตี ในขณะที่ฉันกำลังเขียนคลาสคนกลางฉันรู้ว่าฉันเพิ่งจะติดตั้งสิ่งต่าง ๆ มากมายที่ชั้นเรียนของ EF ได้ทำกับ setter ส่วนตัวเป็นครั้งคราวหรือส่งจากประเภทข้อมูลหนึ่งไปยังอีกประเภทหนึ่ง ดังนั้นดูเหมือนว่าจะเสียเปล่า กฎทั่วไปใช้คลาสเอนทิตี้ของเฟรมเวิร์กเป็นโมเดลสำหรับแอปพลิเคชัน MVC โดยตรงหรือไม่ หรือมีประโยชน์บางอย่างที่ฉันขาดไปในการสร้างคลาสตัวกลางเหล่านี้หรือไม่?

4
ถ้า MVC เป็น“ การแยกความกังวล” ดังนั้นทำไมจึงมีการแนะนำไวยากรณ์ของมีดโกนไว้
คำถามของฉันเกี่ยวข้องกับรูปแบบการออกแบบ MVC และมีดโกนที่แนะนำโดย Microsoft ในขณะที่การเรียนรู้รูปแบบการออกแบบ MVC ผมก็บอกว่าความคิดที่มีพื้นฐานอยู่บนหลักการที่เรียกว่าการแยกความกังวลเกี่ยวกับ แต่มีดโกน Syntax ช่วยให้เราสามารถใช้ C # ในViewsโดยตรง ข้อกังวลนี้แยกกันหรือเปล่า

3
ฉันจะใช้รูปแบบพื้นที่เก็บข้อมูลสำหรับโมเดลวัตถุที่ซับซ้อนได้อย่างไร
คำถามนี้ถูกโยกย้ายจาก Stack Overflow เพราะสามารถตอบได้ใน Software Engineering Stack Exchange อพยพ 7 ปีที่ผ่านมา แบบจำลองข้อมูลของเรามีเกือบ 200 คลาสที่สามารถแบ่งออกเป็นประมาณหนึ่งโหลหน้าที่การทำงาน คงจะเป็นการดีที่จะใช้โดเมน แต่การแยกนั้นไม่สะอาดและเราไม่สามารถเปลี่ยนได้ เรากำลังออกแบบ DAL ของเราใหม่เพื่อใช้ Entity Framework และคำแนะนำส่วนใหญ่ที่ฉันเคยเห็นแนะนำให้ใช้รูปแบบ Repository อย่างไรก็ตามไม่มีตัวอย่างใดที่จัดการกับตัวแบบวัตถุที่ซับซ้อนได้ การใช้งานบางอย่างที่ฉันพบแนะนำให้ใช้ repository ต่อเอนทิตี ดูเหมือนว่าไร้สาระและไม่สามารถบำรุงรักษาได้สำหรับรุ่นที่มีขนาดใหญ่และซับซ้อน จำเป็นหรือไม่ที่จะสร้าง UnitOfWork สำหรับแต่ละการดำเนินการและที่เก็บสำหรับแต่ละเอนทิตี ฉันสามารถจบลงด้วยชั้นเรียนหลายพันชั้น ฉันรู้ว่าสิ่งนี้ไม่สมเหตุสมผล แต่ฉันได้พบแนวทางเล็กน้อยในการใช้ Repository, Unit of Work และ Entity Framework ผ่านโมเดลที่ซับซ้อนและแอปพลิเคชันทางธุรกิจที่สมจริง

5
คุณจะทำอย่างไรเมื่อลูกค้าต้องการแก้ไข Rich Text บนเว็บไซต์ของพวกเขา
ดังที่เราทุกคนรู้แล้วว่าการโจมตี XSS นั้นอันตรายและง่ายต่อการดึงออกมา กรอบงานที่หลากหลายทำให้ง่ายต่อการเข้ารหัส HTML เช่นเดียวกับ ASP.NET MVC &lt;%= Html.Encode("string"); %&gt; แต่จะเกิดอะไรขึ้นเมื่อลูกค้าของคุณต้องการให้พวกเขาสามารถอัปโหลดเนื้อหาของพวกเขาได้โดยตรงจากเอกสาร Microsoft Word นี่คือสถานการณ์: ผู้คนสามารถคัดลอกและวางเนื้อหาจาก Microsoft word ลงในโปรแกรมแก้ไขแบบ WYSIWYG (ในกรณีนี้คือtinyMCE ) จากนั้นข้อมูลจะถูกโพสต์ไปยังหน้าเว็บ เว็บไซต์เป็นสาธารณะ แต่เฉพาะสมาชิกขององค์กรนั้นเท่านั้นที่สามารถเข้าถึงโพสต์ข้อมูลไปยังหน้าเว็บได้ ฉันจะจัดการกับข้อกำหนดเหล่านี้อย่างปลอดภัยได้อย่างไร ขณะนี้ไม่มีการตรวจสอบสิ่งที่ลูกค้าโพสต์ (เนื่องจากมีเพียงผู้ใช้ที่ 'เชื่อถือได้' เท่านั้นที่สามารถโพสต์ได้) แต่ฉันไม่พอใจโดยเฉพาะอย่างยิ่งและต้องการล็อคมันเพิ่มเติมในกรณีที่บัญชีถูกแฮ็ค วิธีการทางความคิดเพียงอย่างเดียวที่ฉันรู้ว่าตรงตามข้อกำหนดเหล่านี้คือการอนุญาตแท็ก HTML และอนุญาตให้ผ่านได้ มีวิธีอื่นอีกไหม? หากไม่เป็นวิธีที่ปลอดภัยในการปล่อยให้ผู้ใช้เก็บข้อมูลลงในฐานข้อมูลในรูปแบบใด แต่แสดงเฉพาะการเข้ารหัสที่ถูกต้องและแยกแท็กที่ไม่ถูกต้อง คำถามที่เกี่ยวข้อง การป้องกัน Cross Script Scripting (XSS)
18 c#  .net  asp.net-mvc 

1
จำเป็นต้องมีคลาสโรงงานเพื่อสร้างมุมมองโมเดลหรือไม่?
เพื่อนร่วมงานของฉันแนะนำให้ใช้คลาสโรงงานสำหรับการสร้างวัตถุ viewmodel ในโซลูชัน ASP.NET MVC ของเรา ความคิดที่ว่ามันสามารถช่วยในการออกแบบและการบำรุงรักษาของวิธีการดูรุ่นที่สร้างขึ้นในแอพของเรา ฉันต้องการค้นหาว่ามีใครมีประสบการณ์นี้หรือไม่ ฉันได้ทำวิจัยและพบว่าน้อยมากในการฝึกนี้ ขณะนี้เราสร้างวัตถุ viewmodel ที่ระดับคอนโทรลเลอร์เช่น public ActionResult Index() { return this.View(this.BuildIndexViewModel()); } ดังนั้น this.BuildIndexViewModel () มีหน้าที่สร้างคลาส viewmodel (ชัด ๆ :) แต่เรากำลังพิจารณาความเป็นไปได้ของ: public ActionResult Index() { return this.View(ViewModelFactory.CreateIndexViewModel()); } นี่เป็นความคิดที่น่าสนใจ แต่ฉันไม่มั่นใจ 100% ฉันสนใจความเห็นของคนอื่นในเรื่องนี้

3
เป็นความคิดที่ดีที่จะเพิ่ม ViewModel เหมือนกับ Model
ฉันมีเลเยอร์ต่อไปนี้ในโซลูชันของฉัน: App.Domain App.Service App.Core (บางทีคุณอาจเรียกแอปนี้ว่า DataLayer) App.Web รูปแบบการออกแบบซอฟต์แวร์ไม่ใช่คำถามของฉันฉันมี Model ต่อไปนี้ Domain public class Foo { public int Id {get;set;} public int Name {get;set;} public int Value {get;set;} } ฉันต้องการใช้โมเดลนี้ในมุมมอง (ตัวอย่างเช่นหน้าแรก) และฉันต้องการใช้Id, Name &amp; Valueดังนั้นหากฉันต้องการสร้าง ViewModel ฉันจะเพิ่มสิ่งต่อไปนี้: public class FooViewModel { public int Id {get;set;} public int Name {get;set;} public int …

5
แนวปฏิบัติที่ดีที่สุดสำหรับการตั้งชื่อรูปภาพที่อัปโหลดคืออะไร
สมมติว่าฉันมีแบบฟอร์มในเว็บแอปพลิเคชันซึ่งผู้ใช้สามารถอัปโหลดรูปโปรไฟล์ ฉันมีข้อกำหนดเล็กน้อยเกี่ยวกับขนาดไฟล์ขนาดและอื่น ๆ แต่เมื่อผู้ใช้อัปโหลดภาพฉันจะตั้งชื่อพวกเขาในระบบของฉันได้อย่างไร ฉันคิดว่ามันจะต้องมีความสอดคล้องและไม่ซ้ำกัน อาจเป็น GUID หรือไม่? a5c627bedc3c44b7ae7c06a44fb3fcf8.jpg การประทับเวลา? 129899740140465735.jpg แฮช เช่น md5 b1a9acaf295cf14ffbc5b6538294562c.jpg มีวิธีมาตรฐานหรือแนะนำให้ทำเช่นนี้?

2
มันจะดีกว่าถ้ามีการสร้างและแก้ไขการกระทำที่แยกจากกันหรือรวมสร้างและแก้ไขเป็นหนึ่ง?
เรากำลังใช้ ASP.NET MVC 2 กับเลเยอร์ควบคุมและมุมมองการนำเสนอและรูปแบบซึ่งประกอบด้วยชั้นตรรกะทางธุรกิจ, ชั้นการเข้าถึงข้อมูล ในชั้นธุรกิจขึ้นไปเพื่อวัตถุประสงค์ส่วนใหญ่การแก้ไขดูเหมือนว่าจะสามารถแสดงทั้งการสร้างวัตถุและการแก้ไขวัตถุ สิ่งนี้สอดคล้องกันกับรูปแบบการออกแบบพื้นที่เก็บข้อมูลของเราซึ่งกำหนดวิธีการ "บันทึก" เราสามารถเช็คอินกระบวนงานที่เก็บไว้ถ้า ID เป็น 0 และสร้างวัตถุใหม่ถ้าเป็น 0 มิฉะนั้นเราสามารถอัปเดตวัตถุที่มีอยู่ได้เนื่องจากรหัสหมวดหมู่ควรตรงกับหนึ่ง ประเด็นหลักของการสนทนาคือถ้าเหมาะสมที่สุดที่จะแยกการแก้ไขซึ่งรวมถึงการสร้างเป็นส่วนต่าง ๆ ของการสร้างและแก้ไขนอกเหนือจากเลเยอร์ DAL ตัวอย่างที่ชัดเจนสามารถแสดงเป็นเส้นทาง: สร้าง - http: // someurl / somearea / edit / 0 แก้ไข - http: // someurl / somearea / edit / 254 เมื่อเทียบกับ สร้าง - http: // someurl / …

2
วิธีการสร้างเว็บไซต์ ASP.NET MVC แบบแยกส่วน
ฉันอยู่ในขั้นตอนการวางแผนสำหรับระบบอินทราเน็ตของพนักงานที่จะสร้างด้วย ASP.NET MVC 4 เราต้องการให้ไซต์ประกอบด้วย "โมดูล" แยกจากกันซึ่งแต่ละอันมีคุณสมบัติที่แตกต่างกัน: การส่งข้อความการเปลี่ยนแปลงเงินเดือน ฯลฯ ฉันต้องการให้โมดูลเหล่านี้สามารถเปิดใช้งานหรือปิดใช้งานในเวลารวบรวม หน้าแรกจะแสดงการนำทางบางประเภทที่จะเชื่อมโยงไปยังแต่ละโมดูลที่โหลด มันเป็นเรื่องง่ายจนถึงตอนนี้ แต่ฉันไม่ต้องการคุณลักษณะการนำทางที่ต้องรู้เกี่ยวกับโมดูลล่วงหน้า กล่าวอีกนัยหนึ่งฉันต้องการให้โมดูลค้นพบแบบไดนามิก; ฉันต้องการที่จะสามารถเขียนรหัสสำหรับโมดูลใหม่แล้วมีลิงค์เพิ่มไปยังแถบนำทางโดยไม่มีการเปลี่ยนแปลงรหัสใด ๆ ในแหล่งที่มา แต่ละโมดูลควรมีวิธีการลงทะเบียนด้วยแถบการนำทางและที่สำคัญกว่านี้ควรทำสำหรับแต่ละโมดูลเมื่อโหลด ฉันเชื่อว่าสิ่งนี้จะขัดขวางการใช้พื้นที่ของ MVC เนื่องจากสิ่งเหล่านี้ได้รับการออกแบบมาสำหรับกรณีที่รู้จักเค้าโครงของไซต์ไว้ล่วงหน้า MEF ดูเหมือนว่าอาจจะเหมาะสมแม้ว่าคนดูเหมือนจะประสบความสำเร็จในการรวม MEF กับ MVC MEF เป็นวิธีที่จะไปที่นี่จริง ๆ หรือมีวิธีที่ดีกว่าในการบรรลุสิ่งที่ฉันต้องการหรือไม่?

3
ASP.NET MVC กับ WCF สำหรับ REST API + การใช้เว็บเพจ
ฉันคิดว่าการสนทนาสำหรับการใช้บริการเชิงโปรแกรมเทียบกับการโต้ตอบกับมนุษย์นั้นชัดเจน แต่ถ้าฉันต้องสร้างแอปพลิเคชั่นที่ใช้ทั้ง API เชิงโปรแกรมและเว็บไซต์ที่ใช้ประโยชน์จากข้อมูลที่เชื่อมต่อด้วย API เดียวกันมันจะให้ประโยชน์แก่ ASP.NET เพียงอย่างเดียวหรือไม่ การรวม ASP.NET และ WCF เข้ากับแอพพลิเคชันเดียวกันทำได้ง่ายเพียงใด?

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