คุณจัดการ config ด้วยการฉีดพึ่งพาได้อย่างไร?


18

ฉันเป็นแฟนตัวยงของ DI / IOC มันเป็นเรื่องที่ยอดเยี่ยมสำหรับการจัดการ / การแยกตัวออกจากการพึ่งพาอย่างหนักและทำให้ชีวิตง่ายขึ้นเล็กน้อย

อย่างไรก็ตามฉันมีด้ามจับเล็ก ๆ กับมันซึ่งฉันไม่แน่ใจว่าจะแก้ปัญหาได้อย่างไร

แนวคิดพื้นฐานใน DI / IOC คือเมื่อวัตถุถูกสร้างอินสแตนซ์การอ้างอิงทั้งหมดจะถูกเติมไว้ล่วงหน้าภายใน Constructor

อย่างไรก็ตาม IMHO มีพารามิเตอร์หลายประเภทสำหรับตัวสร้าง (โดยเฉพาะเมื่อวัตถุของคุณไม่เปลี่ยนรูป)

  1. การพึ่งพา (วัตถุที่จำเป็นสำหรับวัตถุของคุณในการทำงาน)
  2. การกำหนดค่า (ข้อมูลเกี่ยวกับสภาพแวดล้อมที่จำเป็นในการทำงาน)
  3. พารามิเตอร์ (ข้อมูลที่ใช้งานได้)

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

ฉันต้องการทราบว่ากลยุทธ์ / รูปแบบการจ้างงานของผู้คนและข้อดีและข้อเสียที่พบ

NB ฉันรู้ว่านี่เป็นคำถามที่เป็นอัตนัยและได้พยายามทำให้เป็นคำถามแบบอัตนัย "ดี" ตามแนวทางของ SE


โดย "การกำหนดค่า" คุณหมายถึงการกำหนดค่า dev-environment (เช่นการพัฒนาหรือการผลิต) ถ้าเป็นเช่นนั้นฉันมักจะจัดการสิ่งนั้นในฐานะการพึ่งพาแบบดั้งเดิม
MetaFight

ดีที่สุดในการสร้างด้วยการอ้างอิง แต่การกำหนดค่าเริ่มต้นดังนั้นวัตถุจะเกิดขึ้นอย่างดี เรียกวิธีการเพิ่มเติมเพื่อตั้งค่าการกำหนดค่าและพารามิเตอร์อื่น ๆ การทำมากเกินไปใน ctor เป็นสิ่งที่ไม่ดี
david.pfx

I am still trying to work out the best way to deal with the other two- ส่งต่อพวกเขาเป็นพารามิเตอร์สามัญไปยังวัตถุของคุณ?
Robert Harvey

@RobertHarvey วัตถุที่เปลี่ยนรูปไม่ได้? ทำให้การดีบักง่ายขึ้นมาก
ArTs

คำตอบ:


9

การกำหนดค่า (ข้อมูลเกี่ยวกับสภาพแวดล้อมที่จำเป็นในการทำงาน)

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

พารามิเตอร์ (ข้อมูลที่ใช้งานได้)

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


1

สิ่งที่ฉันทำคือรูปแบบจากโรงงานสำหรับกรณีเหล่านี้

ฉันไม่ได้ใช้วัตถุเองเป็นอ้างอิง แต่สร้างวัตถุจากโรงงานด้วยวิธีการรับที่ยอมรับพารามิเตอร์ที่ไม่สามารถผูกโดยอัตโนมัติโดยภาชนะ

อดีต .:

 interface IDependencyObject {
       ....
 }

 class DependencyObject {

      public DependencyObject(int primitive, IAnotherDependency anotherDependency) {
      ...
      }

 }

 class DependencyObjectFactory {

      private readonly IAnotherDependency anotherDependency;

      public DependencyObjectFactory(IAnotherDependency anotherDependency) {
           this.anotherDependency = anotherDependency;
      }

      public IDependencyObject Get(int primitive) {
           return new DependencyObject(primitive, anotherDependency);
      }
 }

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