เมื่อวางแผนสถาปัตยกรรมสำหรับเว็บแอ็พพลิเคชัน MVC ขนาดกลางขนาดใหญ่คุณจะใช้เลเยอร์ให้เป็นแบบแยกย่อยได้มากที่สุดและง่ายต่อการทดสอบอย่างไร (โดยทั่วไปปฏิบัติตามแนวทางปฏิบัติที่ดีที่สุด) สมมติว่าฉันใช้รหัสก่อนเพื่อเข้าถึงข้อมูลของฉัน
ฉันต่อสู้กับสิ่งที่จะกำหนด "ตรรกะทางธุรกิจ" เป็นและวิธีที่มันหมายถึงการโต้ตอบกับชั้นข้อมูล ยกตัวอย่างเช่นแอปพลิเคชันการขายยานพาหนะตรรกะทางธุรกิจจะเป็นคลาสที่ทำงานเช่นการคำนวณวงภาษีสำหรับยานพาหนะที่กำหนดเปรียบเทียบสถิติไมล์ต่อแกลลอน ฯลฯ หรือไม่ สำหรับองค์กรธุรกิจ (เช่นรถยนต์รถตู้รถจักรยานยนต์) ฉันจะใส่สิ่งเหล่านี้ในชั้นข้อมูลพร้อมกับDataContext
ชั้นเรียนของฉัน
นอกจากนี้สิ่งที่จะเป็นตรรกะของแอปพลิเคชันซึ่งตรงข้ามกับธุรกิจ - ฉันคาดเดาสิ่งต่าง ๆ เช่นการตรวจสอบการป้อนข้อมูลเซสชัน / ผู้ใช้?
ตัวอย่างเช่นตัวควบคุมรถอาจส่งคืนผลลัพธ์การกระทำ / มุมมองที่แสดงรายการรถยนต์สิบอันดับแรกที่กรองตามประเภทและ mpg ที่ดีที่สุด ดังนั้นสมมติว่าฉันมีICarRepository
'carRepo' ฉีดเข้าไปในคอนโทรลเลอร์ของฉัน (โดยใช้รูปแบบพื้นที่เก็บข้อมูล / DI) ฉันกรองรถยนต์ของฉันจากพารามิเตอร์วิธีการกระทำเช่นvar cars = carRepo.getCarsByType("hatchback");
ดังนั้นฉันจึงเก็บความรู้การเข้าถึงข้อมูลออกจากตัวควบคุมของฉันโดยใช้ที่เก็บตอนนี้เพื่อให้ตรรกะทางธุรกิจออกจากตัวควบคุมโดยใช้รูปแบบโดเมน - var result = new MpgCalculator (cars); - สมมติว่าฉันต้องการคลาสเครื่องคิดเลขเพราะมันต้องใช้ตรรกะเพิ่มเติมเพื่อคำนวณประสิทธิภาพการใช้เชื้อเพลิงที่ดีที่สุดมากกว่าแค่การโหลด / กรองเอนทิตีจาก DB ดังนั้นตอนนี้ฉันมีชุดข้อมูลสำหรับมุมมองของฉันในการเรนเดอร์ที่ใช้ที่เก็บเพื่อดึงข้อมูลจากเลเยอร์การเข้าถึงข้อมูลและวัตถุเฉพาะโดเมนเพื่อประมวลผลและดำเนินงานที่เกี่ยวข้องกับธุรกิจในข้อมูลนั้น
ฉันทำผิดพลาดที่นี่ เรายังต้องใช้รูปแบบพื้นที่เก็บข้อมูลหรือฉันสามารถโค้ดกับส่วนต่อประสานเพื่อแยกแยะ ORM และทดสอบได้หรือไม่ ในหัวข้อนี้เนื่องจากคลาส data access ของฉันเป็นรูปธรรม dbcontext อยู่ใน data layer คำจำกัดความอินเตอร์เฟสควรเข้าสู่ domain / business layer หมายความว่าหากเทคโนโลยีการเข้าถึงข้อมูลเปลี่ยนแปลงไปเลเยอร์อื่น ๆ ของฉันจะไม่ได้รับผลกระทบหรือไม่
จากสิ่งที่ฉันได้ศึกษาไปแล้วโครงสร้างของฉันมีลักษณะเช่นนี้:
MVC Internet Application -> โครงการอินเทอร์เน็ตมาตรฐาน - รุ่นที่นี่คือ ViewModels
เลเยอร์โดเมน / ธุรกิจ -> คลาส / โมเดลเฉพาะธุรกิจที่ตัวควบคุมสามารถใช้ในการประมวลผลเอนทิตีโดเมนจากชั้นข้อมูลก่อนส่งต่อไปยังมุมมองที่เกี่ยวข้อง
จำเป็นต้องมีที่เก็บบทคัดย่อ? -> ฉันได้ยินการถกเถียงกันมากมายเกี่ยวกับเรื่องนี้โดยเฉพาะเมื่อใช้ ORM
ชั้นข้อมูล -> คลาสเอนทิตี (รถยนต์, รถตู้, รถจักรยานยนต์), DbContext - เลเยอร์เทคโนโลยีการเข้าถึงข้อมูลคอนกรีต