Castle Windsor เป็นเครื่องมือในการควบคุม มีคนอื่นชอบมัน
มันสามารถให้วัตถุที่มีการขึ้นต่อกันที่สร้างไว้ล่วงหน้าและแบบใช้สายล่วงหน้าได้ในนั้น กราฟวัตถุทั้งหมดที่สร้างขึ้นผ่านการสะท้อนและการกำหนดค่ามากกว่าตัวดำเนินการ "ใหม่"
เริ่มที่นี่: http://tech.groups.yahoo.com/group/altdotnet/message/10434
ลองนึกภาพคุณมีคลาสส่งอีเมล EmailSender ลองนึกภาพคุณมี WorkflowStepper คลาสอื่น ภายใน WorkflowStepper คุณต้องใช้ EmailSender
คุณสามารถพูดได้เสมอ new EmailSender().Send(emailMessage);
แต่นั่น - การใช้new
- สร้าง TIGHT COUPLING ที่ยากต่อการเปลี่ยนแปลง (นี่เป็นเพียงตัวอย่างเล็ก ๆ น้อย ๆ หลังจากทั้งหมด)
แล้วถ้าเช่นนั้นแทนที่จะเป็นเด็กเลวตัวใหม่ใน WorkflowStepper คุณแค่ส่งมันเข้าไปใน Constructor?
ดังนั้นใครก็ตามที่เรียกมันว่าต้องมีอีเมล์ใหม่
new WorkflowStepper(emailSender).Step()
ลองนึกภาพว่าคุณมีชั้นเรียนเล็ก ๆ หลายร้อยชั้นที่มีเพียงความรับผิดชอบเดียว (google SRP) .. และคุณใช้บางส่วนใน WorkflowStepper:
new WorkflowStepper(emailSender, alertRegistry, databaseConnection).Step()
ลองนึกภาพไม่ต้องกังวลกับรายละเอียดของEmailSender
เวลาที่คุณเขียนWorkflowStepper
หรือAlertRegistry
คุณแค่กังวลเกี่ยวกับความกังวลที่คุณกำลังทำงานด้วย
ลองนึกภาพทั้งกราฟ (ต้นไม้) ของวัตถุและการขึ้นต่อกันนี้จะถูกต่อเข้ากับ RUN TIME ดังนั้นเมื่อคุณทำสิ่งนี้:
WorkflowStepper stepper = Container.Get<WorkflowStepper>();
คุณจะได้รับข้อตกลงที่แท้จริงWorkflowStepper
กับการอ้างอิงทั้งหมดโดยอัตโนมัติในที่ที่คุณต้องการ
ไม่มี new
มันเพิ่งเกิดขึ้น - เพราะมันรู้ว่าอะไรต้องการอะไร
และคุณสามารถเขียนข้อบกพร่องน้อยลงด้วยรหัส DRY ที่ออกแบบมาดีกว่าด้วยวิธีทดสอบและทำซ้ำได้