การฉีดแบบพึ่งพานั้นไม่เพียงแค่เคลื่อนย้ายความซับซ้อนไปยังคลาสอื่น ๆ


9

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

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


6
ในทศวรรษที่ฉันคาดว่า DI จะรับช่วงต่อ bashing จาก Singleton แต่คราวนี้ด้วยเหตุผลที่ดี มันมีประโยชน์บางอย่าง แต่ฉันแนะนำให้ระมัดระวังในการประเมินผลกระทบ
Balog Pal

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

7
โปรดทราบว่าระบบใด ๆ สำหรับการจัดระเบียบรหัสสามารถอธิบายว่า "เพียงแค่ย้ายความซับซ้อนที่อื่น" มันไม่ได้เกี่ยวกับการลบความซับซ้อนมากเท่าการจัดระเบียบด้วยวิธีที่สมเหตุสมผลและมีประโยชน์มากที่สุด

1
หากคุณต้องนำเข้า 50 ส่วนหัวคุณต้องทำที่ไหนสักแห่ง DI ช่วยให้คุณทดสอบหน่วยของคุณได้ง่ายขึ้น
BЈовић

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

คำตอบ:


16

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

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

มีหลักการหลายอย่างที่คล้ายกันและมักใช้ร่วมกันคือ: การพึ่งพาการฉีด (DI), การผกผันของการควบคุม (IoC) และหลักการผกผันการพึ่งพา (DIP)

จากบทความนี้ http://martinfowler.com/articles/dipInTheWild.html

DI เป็นเรื่องเกี่ยวกับการเดินสาย IoC เป็นเรื่องเกี่ยวกับทิศทางและกรมทรัพย์สินทางปัญญาเป็นเรื่องเกี่ยวกับรูปร่าง


2
+1 สำหรับคำพูดสุดท้าย เป็นการชี้แจงที่ดีที่สุดของแนวคิดทั้งสามนี้ที่ผู้คนมักเข้าใจผิด
haylem

บทความที่ลิงก์ด้านบนมีความโดดเด่นจริงๆ คำอธิบายที่ลึกและชัดเจนเพียงพอ
DemetriKots

10

การฉีดแบบพึ่งพานั้นไม่ได้ลดความซับซ้อน แต่เพิ่มความสามารถในการ manitainability ผ่านการแยกความกังวลและการมีเพศสัมพันธ์ลดลง

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

คุณควรที่จะหลีกเลี่ยงคลาส "ที่มีรูปร่าง" ดังนั้นสมมติว่าคุณแบ่งตัวควบคุมมุมมองออกเป็นคลาสที่เล็กลงและบำรุงรักษาได้มากกว่า ตอนนี้พวกเขาทั้งหมดมีความรับผิดชอบที่จะได้รับการพึ่งพาของพวกเขา DI ช่วยให้คุณสามารถที่จะย้ายการจัดการการพึ่งพานี้จากทุกชั้นเรียนเหล่านั้นลงในชั้นโรงงาน / การตั้งค่าซึ่งเป็นเพียงผู้รับผิดชอบการจัดการการพึ่งพา - ดู Single รับผิดชอบหลักการ และในขณะที่มันจะ "humongous" น้อยกว่าตัวควบคุมมุมมองเดิมอย่างมากถ้ามันมีขนาดใหญ่เกินไปคุณจะมีตัวเลือกเพื่อแยกมันออกเป็นคลาสการจัดการการพึ่งพาที่เล็กกว่าซึ่งรับผิดชอบส่วนต่าง ๆ ของแอปพลิเคชัน


2

ในคำพูดของคนธรรมดา:

การพึ่งพาการฉีดจะย้ายความซับซ้อนไปยังที่ที่มันจะได้รับอันตรายน้อยลง

แก้ไขสำหรับ @gnat: DI ไม่เพียง แต่เคลื่อนย้ายความซับซ้อนไปยังคลาสที่แยกต่างหาก แต่มันจะย้ายไปยังจุดที่ทำให้เกิดอันตรายน้อยกว่า


คำถามนี้ถามคำถามนี้อย่างไร
ริ้น

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