ใน. NET (Visual Studio) คุณจะสร้างแอสเซมบลีใหม่เมื่อใด


9

ฉันกำลังทำงานกับแอปพลิเคชัน Silverlight ฉันแยกมันออกเป็นหลายชุด

  • โดเมน
  • ที่เก็บข้อมูล (ทุกอย่างที่มีอยู่ในฐานข้อมูล Sterling)
  • UI
  • ...

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

ฉันเคยเห็นโครงการที่มีชุดประกอบมากเกินไป แทนที่จะใช้เนมสเปซที่เหมาะสม

ดังนั้น: เมื่อใดที่คุณจะสร้างชุดประกอบใหม่สำหรับชิ้นส่วนใหม่ของรหัส มีทรัพยากรที่ดีในเรื่องนี้หรือไม่? และคุณแบ่งรหัสทางเทคนิค (โดเมน, ข้อมูล, UI ฯลฯ ) และ / หรือการทำงาน (เช่นการบริหารผู้ป่วย, ผู้ป่วย - แพทย์, โรงพยาบาล - โลจิสติกส์, ... - อาจเป็นเพียงสำหรับแอปพลิเคชันระดับองค์กรที่ใหญ่กว่า)?

คำตอบ:


1

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

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

แน่นอนว่าคุณไม่ควรพูดเกินจริง แต่แยกกันตามความเหมาะสม คิดแบบนี้: "ชั้นเรียนเหล่านี้อยู่ด้วยกันและไม่จำเป็นต้องรู้เกี่ยวกับชั้นเรียนเหล่านี้" และแยกออกไปตามสายเหล่านั้น


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

3
ไม่ใช่ความคิดที่ดี VS ช้ามากเมื่อโซลูชันมีมากกว่าสองสามโครงการ
nikie

4
หาก VS ของคุณช้าเกินไปคุณก็กำลังใช้งานเวอร์ชั่นเก่าหรือคอมพิวเตอร์ช้า ฉันมีโครงการขนาดใหญ่ที่มี 30+ โครงการที่รวบรวมในไม่กี่วินาที จากนั้นอีกครั้งฉันมี ram, cores และ SSD จำนวนมาก :) คุณไม่ควรพูดเกินจริง แต่แยกออกจากกันตามความเหมาะสมเท่านั้นลองคิดแบบนี้ "คลาสเหล่านี้อยู่ด้วยกันและไม่จำเป็นต้องรู้เกี่ยวกับคลาสเหล่านี้" และ แยกไปตามสายเหล่านั้น
Homde

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

2
ต่อไปนี้วิธีนี้คุณสามารถท้ายกับพวงของการประกอบ A: A, B, C, D, E, F, G, H, I, ,J Kเมื่อใดก็ตามที่คุณอ้างอิงประกอบคุณยังต้องอ้างอิงประกอบขึ้นอยู่กับ:A , , แต่การชุมนุมจะขึ้นอยู่กับ: , , , ดังนั้นเราจะต้องเหล่านั้นมากเกินไป ดังนั้นเมื่อใดก็ตามที่คุณต้องการฟังก์ชั่นบางอย่างคุณต้องดึงชุดประกอบเพิ่มเติมอีก 7 ชิ้นเพื่อให้ทำงานได้ ตรวจสอบให้แน่ใจว่าคุณได้รับเวอร์ชันที่ถูกต้องของแต่ละชุดประกอบ ยินดีต้อนรับสู่ DLL Hell ใหม่ BCDCEFGHA
Ed James

14

แอสเซมบลีเป็นหน่วยของการปรับใช้สำหรับโปรแกรมประยุกต์. NET ดังนั้นคุณควรพิจารณาตัดส่วนประกอบของคุณกับสถาปัตยกรรมการปรับใช้ของคุณ

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

โปรดจำไว้ว่าเนมสเปซสามารถขยายชุดประกอบได้ ในหลายกรณีการแยกพฤติกรรมโดยใช้เนมสเปซนั้นเพียงพอแล้ว ดู. NET mscorlib.dllที่ในแอสเซมบลีเดียวประกอบด้วยรหัสที่ครอบคลุมอาร์เรย์ของลักษณะการทำงานที่แยกจากกันโดย namespace เท่านั้น

หากคุณต้องการสิทธิอำนาจบางอย่างในเรื่องนี้อย่ามองไปไกลไปกว่า:

แนวทางการออกแบบกรอบ

แนวทางการออกแบบกรอบการทำงาน: อนุสัญญาสำนวนและรูปแบบสำหรับไลบรารี. NET ที่นำกลับมาใช้ใหม่ (รุ่นที่ 2)โดย Krzysztof Cwalina และ Brad Abrams


ขอบคุณสำหรับการอ้างอิงหนังสือแน่นอน ฉันจะตรวจสอบว่า คุณสามารถอธิบายรายละเอียดเกี่ยวกับสถาปัตยกรรมการปรับใช้ได้หรือไม่ การปรับใช้ 10 ไฟล์ DLL จะแตกต่างจากการปรับใช้ 1 อย่างไร หากคุณไม่สามารถอัปเดตหนึ่งในสิบไฟล์ในขณะที่ไฟล์อื่น ๆ ยังคงไม่ถูกแตะต้อง?
ปีเตอร์

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