วิธีการสร้างเว็บไซต์ ASP.NET MVC แบบแยกส่วน


14

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

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

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


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

1
ฟังดูแล้วเหมือนว่าคุณต้องการสร้าง CMS ยกเว้นว่าแทนที่จะทำการดูแลระบบ CMS จากภายใน CMS คุณต้องการให้ทำในเวลาบิลด์อิน สิ่งใดทำให้ฉันมีคำถามทำไมคุณถึงต้องการให้ทำในเวลาที่สร้าง
James P. Wright

@ JamesP.Wright เหตุผลที่ฉันต้องการที่จะสร้างมันเป็นเพียงเพราะมันดูเหมือนจะง่ายกว่าการแสดงฟังก์ชั่นนี้ผ่านหน้าบนเว็บไซต์ (ยิ่งกว่านั้นชุดของโมดูลที่ใช้จะเปลี่ยนแปลงได้ไม่บ่อยนักที่ค่าใช้จ่ายเพิ่มเติมของการเลือกแบบไดนามิกนี้ไม่จำเป็น) แต่จริงๆแล้วสิ่งที่สำคัญกว่าการเลือกโมดูล ณ เวลาที่สร้างคือความสามารถของแอปพลิเคชันในการค้นหาโมดูล สถานที่แรกซึ่งเป็นแรงผลักดันคำถามของฉัน
bdesham

nopCommerce ( nopcommerce.com/documentation.aspx ) เป็นตัวอย่างที่ดีที่คุณต้องการ ดูวิธีการเขียนปลั๊กอินและแนวทางสำหรับ DI
Rui Marques

สำหรับวัตถุประสงค์ในการวิจัยฉันสงสัยว่า 'ความสำเร็จที่หลากหลาย' ในการรวม MEF กับ MVC เนื่องจาก codeplex คือ "Living in the archive" ทุกวันนี้ลิงก์ที่ OP ให้ไว้ไม่ทำงานอีกต่อไป ในการสำรองเวลาให้กับผู้อื่น: ค้นหาด้วย ctrl + f สำหรับ 'MEF2 กับ MVC4 ผ่าน Microsoft.Composition' บนแท็บการอภิปรายในarchive.codeplex.com/?p=mef ;)
Kevin

คำตอบ:


4

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

แต่ละโมดูลจะมีตัวสร้างสแตติกของตัวเองที่จะบันทึกตัวเองในชั้นเรียนรวมศูนย์ที่ติดตามโมดูล

ลองนึกถึงระบบนี้มากกว่าระบบนาฬิกาเวลาที่พนักงานเข้ามาและนาฬิกาจากนั้นในเวลาบัญชีเงินเดือนเรารู้ว่าจะจ่ายพนักงานทุกคนโดยขึ้นอยู่กับผู้ที่ลงเวลาเป็นต้น

การสะท้อนยังสามารถใช้ถ้าคุณมีสัญญาอินเตอร์เฟซในโมดูลที่พวกเขาจะต้องสืบทอดจากที่ผูกข้อมูลคุณสมบัติเมตาไปที่มัน

ฉันทำงานให้กับ Warner Brothers Music และใช้ระบบประมวลผลเพลงภายในสำหรับรูปแบบการเข้ารหัสที่แตกต่างกัน ฉันสร้างรูปแบบปลั๊กอินทั่วไปสำหรับการเข้ารหัสด้วยการสะท้อนที่ใช้การสืบทอดดังนั้นจึงอาจเป็น typecast พร้อมการสะท้อนเพื่อรับคุณสมบัติเมตาพื้นฐานของชั้นเรียน ฉันไม่ได้ลองใช้คลาสที่มีศูนย์กลางแบบคงที่ แค่คิดแบบนั้นเป็นการสุ่มลองอีกวิธีหนึ่งเพื่อความสนุก

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

คุณสามารถใช้ประโยชน์จาก JIT ด้วยการกด FTP หรือ GIT ง่าย ๆ แทนที่จะต้องคอมไพล์ในเครื่องและกด DLL ที่อยู่รอบ ๆ

นี่คือลิงค์ไปยังบทความนั้นในสแต็คโอเวอร์โฟลว์


ฟังดูคล้ายกับสิ่งที่ฉันจินตนาการ ปัญหาเดียวก็คือฉันจะโหลดโมดูลได้อย่างไรในตอนแรก? ฉันจะบอกกลไกให้แต่ละคนลงทะเบียนอย่างไรกับคนชั้นกลาง? นี่คือที่ MEF ดูเหมือนว่ามันอาจจะเหมาะสม
bdesham

MEF ดีกว่า ฉันให้ความคิดโดยไม่ได้ดู แต่ฉันจะใช้ MEF ให้ตัวเลือกนั้นถ้ามันออกมาเมื่อฉันทำโครงการเหล่านั้น ดูเหมือนความคิดที่ดี ฉันไม่เห็นว่าทำไมคุณไม่สามารถรวม MEF และ MVC ได้
Jason Sebring

1

คุณอาจต้องการใช้ MEF กับ MVC สิ่งนี้จะทำให้คุณสามารถเพิ่ม - นำออกไปได้ตามต้องการโดยไม่ต้องทำการรวบรวมซ้ำหรือปรับใช้ ตามปกติสกอตต์เป็นจุดเริ่มต้นที่ดี: http://www.hanselman.com/blog/ExtendingNerdDinnerAddingMEFAndPluginsToASPNETMVC.aspx

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