แนวทางปฏิบัติที่ดีที่สุดสำหรับสถาปัตยกรรม MVC [ปิด]


28

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

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

หากฉันต้องการสร้างแอปพลิเคชันหลายชั้น / เลเยอร์แนวทางปฏิบัติที่ดีที่สุดที่เกี่ยวข้องกับ MVC คืออะไร

คำตอบ:


5

DI สามารถทำได้ใน ASP MVC โดยใช้ Factory Factory โรงงานนี้ใช้เพื่อแก้ไขการพึ่งพาตัวควบคุมของคุณ

MvcContrib มีการติดตั้งคอนโทรลเลอร์ Facotry บางอย่างที่คุณสามารถใช้งานได้ทันที ฉันใช้การติดตั้ง Castle Windsor ของพวกเขาและทำงานได้ดี ก็จะแนะนำให้ตรวจสอบ TestHelper Class ของพวกเขา มันมีฟังก์ชั่นที่ยอดเยี่ยมมากสำหรับการเยาะเย้ยคอนโทรลเลอร์ HTTPContext, เซสชั่นและอื่น ๆ MVCContrib

ส่วนตัวฉันชอบให้อินสแตนซ์ Repository ของฉันทำงานด้วย โมเดลแสดง api ไปยังที่เก็บ (CRUD) การขึ้นต่อกันของตัวควบคุมในรุ่นใดรุ่นหนึ่งจะถูกสร้างขึ้นบนตัวสร้าง (ตัวสร้าง) ซึ่งจะถูกส่งผ่านทางตัวควบคุมโรงงาน นี่คือจุดเริ่มต้นของฉันไปยังกราฟวัตถุที่ IoC คอนเทนเนอร์ของฉันจัดการ


2

เราจะวางคลาส Repository ไว้ที่ไหน

พวกเขาอยู่ในรูปแบบ; มันเป็นรูปแบบในแอปพลิเคชัน

ฉันจะจัดโครงสร้างเลเยอร์ได้อย่างไร หากฉันต้องการสร้างแอปพลิเคชันหลายชั้น / เลเยอร์แนวทางปฏิบัติที่ดีที่สุดที่เกี่ยวข้องกับ MVC คืออะไร

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


ดังนั้นคุณแนะนำให้พวกเขาควรไปในโครงการ UI ของแอปพลิเคชันหลายชั้น?
Erik Funkenbusch

@Mystere Man ถ้ามันไม่ใหญ่โตพวกเขาควรไปในโครงการที่โฮสต์แอปพลิเคชัน MVC ของคุณ โดยเฉพาะอย่างยิ่งตรรกะทางธุรกิจจะเข้าไปในตัวควบคุมและแต่ละการกระทำจะมีตรรกะของตัวเอง MVC ไม่เพียง แต่เป็นรูปแบบ UI เท่านั้น นั่นเป็นเหตุผลที่ฉันไม่เห็นด้วยกับการยืนยันของคุณว่าเป็น 'โครงการ UI' มันไม่ใช่ เป็นโครงการ MVC ที่เป็นViewส่วนหนึ่ง (มี UI ของคุณ)
George Stocker

โอเคบางทีฉันก็ใช้ถ้อยคำที่ไม่ดี อย่างไรก็ตามคุณไม่เห็นด้วยว่าเลเยอร์มุมมองไม่ควรจัดการฐานข้อมูลหรือไม่ และถ้าคุณใส่คลาส Repository ลงในโมเดลดังนั้นมุมมองสามารถทำได้
Erik Funkenbusch

ในแอปพลิเคชัน MVC ขนาดเล็ก UI "เลเยอร์" เป็นเพียงโฟลเดอร์ที่เก็บมุมมอง ในแอปพลิเคชันขนาดใหญ่อาจเป็นโครงการของตัวเอง หากเป็นโครงการของตัวเองมันจะประสานงานกับคอนโทรลเลอร์และคอนโทรลเลอร์สามารถเชื่อมต่อเข้ากับ BusinessLayer ได้ตามต้องการ ไม่มีใครที่อยู่นอกคอนโทรลเลอร์จะต้องรู้ว่ามีเลเยอร์ธุรกิจอยู่ ฉันคิดว่าคุณกำลังคิดว่าสิ่งเหล่านี้เป็นโครงการแยกกันโดยอัตโนมัติ แต่พวกเขาไม่จำเป็นต้องเป็น
George Stocker
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.