ทำความเข้าใจข้อต่อที่แน่นหนาใน“ โลกแห่งความจริง”


9

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

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

มันผิดหรือเปล่า? ถ้าเป็นเช่นนั้นหากโมดูลยังคงขึ้นอยู่กับจุดของทุกสิ่งที่ไม่ทำงานความแตกต่างระหว่างคับ / หลวมคลัป?


2
มันค่อนข้างจะเถียงกันว่าคุณสามารถถอดยางออกจากรถได้และมันก็ยังใช้งานได้ดี
Ryathal

1
@Ryathal - ก็จริงแล้ว :) รถ "" จะทำงานได้ดี มันไม่มียาง แต่จะใช้งานได้ดี ตามความเป็นจริงถ้าคุณต้องการคุณสามารถทำลายล้อ แต่คุณสามารถขับได้เช่นกัน อาจเป็นหลุมเป็นบ่อเล็ก ๆ น้อย ๆ :)
โกง

ใช่ตรงตามที่ @ldigas พูด รถจะสตาร์ทวิทยุจะทำงานทุกอย่างจะทำงาน แต่ส่วนการเคลื่อนไหว นั่นคือสิ่งที่ฉันพยายามจะพูด
ออสการ์ Godson

คำตอบ:


21

ไม่มาก --- การถอดโมดูลอาจทำให้ระบบแตกได้ แนวคิดที่อยู่เบื้องหลังระบบที่เชื่อมโยงกันอย่างหลวม ๆ คือการสลับในโมดูลที่ต่างกันโดยสิ้นเชิงจะทำงานได้ดีตราบใดที่โมดูลใหม่นั้นสอดคล้องกับข้อกำหนดของอินเทอร์เฟซเดียวกับระบบเก่า ถ้ามันถูกผนวกเข้าด้วยกันอย่างแน่นหนารหัสที่ล้อมรอบจะทำให้ข้อสันนิษฐานเกี่ยวกับ internals และจะเริ่มล้มเหลวถ้ามีการแนะนำโมดูลใหม่


+1: คำตอบยอดเยี่ยม! โมดูลจะต้องขึ้นอยู่กับโมดูลอื่น แต่ไม่ขึ้นอยู่กับการใช้งานภายใน
Giorgio

5

การแต่งงานกันแบบหลวม ๆนั้นเป็นการพึ่งพาทางอ้อมระหว่างโมดูลกับวิธีที่พวกเขาสามารถพัฒนาขึ้นได้

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

โมดูลดังกล่าวแม้ว่าจะรับผิดชอบหน้าที่การทำงานของแต่ละบุคคลไม่สามารถพัฒนาได้อย่างอิสระหรือไม่สามารถพัฒนาได้


ตัวอย่าง:

สมมติว่าคุณมี 3 วัตถุShape( วัตถุ จำลอง) และCanvas(องค์ประกอบ UI) ตอนนี้

สมมติว่าเมธอดshape.draw(Canvas)จะวาดวัตถุบนระนาบที่ให้มาโดยระนาบของผืนผ้าใบ

ตอนนี้บางครั้งหน้าต่างได้รับการคุ้มครองบางส่วนและปรับขนาด ในกรณีเช่นนี้วิธีการข้างต้นอาจทำอะไรแบบนี้

shape::draw(Canvas) {
   Rect.WindowLeft = Canvas.GetWindowRect.getLeftOffset(); 
   Rect.LeftPixel = Canvas.GetWindowRect.pixels() + Rect.WindowLeft; 
   ....  // like this get all co-ordinates. 

   draw_instance(Rect);  // This will draw the actual shape. 
}

โดยทั่วไปฟังก์ชั่นการดึงที่นี่จะจับสี่เหลี่ยมที่จำเป็นต้องวาด นี่เป็นเรื่องง่ายที่จะเข้าใจ (ผู้คนอาจเรียกรหัสง่าย ๆนี้) อย่างไรก็ตามนี่เป็นรหัสคู่ที่ดีมาก

ลองนึกภาพสถานการณ์:

  • เกิดอะไรขึ้นถ้ากลไกของการถือผ้าใบ windows ไม่มีสี่เหลี่ยมอีกต่อไป?
  • สิ่งที่ถ้ามีการชดเชยเพิ่มเติมที่ช่วยผ้าใบซึ่งเป็นส่วนตัว ?
  • จะเกิดอะไรขึ้นถ้าแอปพลิเคชันอื่นต้องการรูปร่างที่เหมือนกัน แต่ไม่มีหน้าต่าง GUI อีกต่อไป (ตัวอย่างเช่นมันกำลังสร้างรูปภาพและบันทึกในไฟล์)

สาเหตุของปัญหาคือว่าวัตถุshape รู้และด้วยเหตุนี้คู่แน่นCanvasกับ

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


0

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

นอกจากนี้คลัปคับยังหมายความว่าบางส่วนขึ้นอยู่กับการนำโมดูลไปใช้งานโดยเฉพาะไม่ใช่ข้อกำหนดของโมดูลหรือบางสิ่ง

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