เป็นวิธีที่ดีในการอธิบายการฉีดพึ่งพาอะไร
ฉันพบบทเรียนหลายอย่างใน Google แต่ไม่มีใครคิดว่าผู้อ่านเป็นเพียงผู้เริ่มต้นจาวา คุณจะอธิบายสิ่งนี้กับสามเณรได้อย่างไร
เป็นวิธีที่ดีในการอธิบายการฉีดพึ่งพาอะไร
ฉันพบบทเรียนหลายอย่างใน Google แต่ไม่มีใครคิดว่าผู้อ่านเป็นเพียงผู้เริ่มต้นจาวา คุณจะอธิบายสิ่งนี้กับสามเณรได้อย่างไร
คำตอบ:
ฉันให้การฉีดยาแก่คุณสำหรับเด็กอายุห้าขวบ
เมื่อคุณไปและนำสิ่งของออกจากตู้เย็นด้วยตัวคุณเองคุณอาจทำให้เกิดปัญหา คุณอาจเปิดประตูทิ้งไว้คุณอาจได้สิ่งที่แม่หรือพ่อไม่ต้องการให้คุณ คุณอาจกำลังมองหาบางสิ่งที่เราไม่มีหรือหมดอายุแล้ว
สิ่งที่คุณควรทำคือการระบุความต้องการ "ฉันต้องการบางอย่างที่จะดื่มด้วยอาหารกลางวัน" แล้วเราจะทำให้แน่ใจว่าคุณมีบางอย่างเมื่อคุณนั่งลงกิน
แล้วเรื่องนี้ล่ะ
หากคุณมีคลาสEmployee
และพนักงานนี้มีคลาสที่Address
คุณสามารถEmployee
กำหนดคลาสไว้ดังต่อไปนี้:
class Employee {
private Address address;
// constructor
public Employee( Address newAddress ) {
this.address = newAddress;
}
public Address getAddress() {
return this.address;
}
public void setAddress( Address newAddress ) {
this.address = newAddress;
}
}
ทุกอย่างดูดีจนถึงตอนนี้
รหัสนี้แสดงความสัมพันธ์HAS-Aระหว่างพนักงานและที่อยู่ของเขาซึ่งก็ดี
ตอนนี้ความสัมพันธ์HAS-A นี้สร้างการพึ่งพาระหว่างกัน ปัญหาเกิดขึ้นภายในตัวสร้าง
ทุกครั้งที่คุณต้องการสร้างEmployee
อินสแตนซ์ที่คุณต้องการAddress
อินสแตนซ์:
Address someAddress = ....
Employee oscar = new Employee( someAddress );
การทำงานด้วยวิธีนี้จะเป็นปัญหาโดยเฉพาะอย่างยิ่ง เมื่อคุณต้องการทำการทดสอบหน่วย
ปัญหาหลักเกิดขึ้นเมื่อคุณต้องการทดสอบวัตถุหนึ่งโดยเฉพาะคุณต้องสร้างตัวอย่างของวัตถุอื่นและมีแนวโน้มมากที่คุณจะต้องสร้างอินสแตนซ์ของวัตถุอื่น ๆเพื่อทำเช่นนั้น โซ่อาจไม่สามารถจัดการได้
เพื่อหลีกเลี่ยงปัญหานี้คุณสามารถเปลี่ยนนวกรรมิกได้ดังนี้
public Employee(){
}
ใช้ตัวสร้าง args ไม่
จากนั้นคุณสามารถตั้งค่าที่อยู่ได้ตลอดเวลาที่คุณต้องการ:
Address someAddress = ....
Employee oscar = new Employee();
oscar.setAddress( someAddress );
ตอนนี้อาจเป็นการลากหากคุณมีคุณสมบัติหลายอย่างหรือหากวัตถุนั้นสร้างยาก
แต่ลองคิดดูสิคุณเพิ่มDepartment
คุณสมบัติ:
class Employee {
private Address address;
private Department department;
....
หากคุณมีพนักงาน 300 คนและทุกคนต้องมีแผนกเดียวกันและต้องมีแผนกเดียวกันนั้นร่วมกันระหว่างวัตถุอื่น ๆ (เช่นรายชื่อ บริษัท แผนกหรือบทบาทที่แต่ละแผนกมี ฯลฯ ) คุณจะต้อง มีช่วงเวลาที่ยากลำบากในการมองเห็นDepartment
วัตถุและแบ่งปันผ่านเครือข่ายทั้งหมดของวัตถุ
สิ่งที่การพึ่งพาการฉีดคือทั้งหมดที่เกี่ยวกับมันเพื่อช่วยให้คุณ"ฉีด" การพึ่งพาเหล่านี้ในรหัสของคุณ เฟรมเวิร์กส่วนใหญ่อนุญาตให้คุณทำสิ่งนี้ได้โดยการระบุในไฟล์ภายนอกวัตถุใดที่จะถูกฉีด
สมมติว่าไฟล์คุณสมบัติสำหรับหัวฉีดพึ่งพาการอ้างอิง:
#mock employee
employee.address = MockAddress.class
employee.department = MockDepartment.class
#production setup
employee.address = RealAddress.class
employee.department = RealDepartment.class
คุณจะกำหนดสิ่งที่จะฉีดสำหรับสถานการณ์ที่กำหนด
สิ่งที่กรอบการพึ่งพาการฉีดจะทำคือการกำหนดวัตถุที่ถูกต้องสำหรับคุณเพื่อให้คุณไม่ต้องรหัสหรือsetAddress
setDepartment
สิ่งนี้จะทำโดยการไตร่ตรองหรือโดยการสร้างรหัสหรือเทคนิคอื่น ๆ
ดังนั้นในครั้งต่อไปที่คุณต้องทดสอบEmployee
ชั้นเรียนคุณอาจฉีดจำลองAddress
และDepartments
วัตถุโดยไม่ต้องเขียนรหัสชุดทั้งหมด / รับสำหรับการทดสอบทั้งหมดของคุณ ยิ่งไปกว่านั้นคุณสามารถฉีดของจริง Address
และDepartment
วัตถุในรหัสการผลิตและยังมีความมั่นใจว่ารหัสของคุณทำงานตามการทดสอบ
มันเกี่ยวกับมันมาก
ยังฉันไม่คิดว่าคำอธิบายนี้เหมาะสำหรับอายุ 5 ปีตามที่คุณร้องขอ
ฉันหวังว่าคุณจะยังคงมีประโยชน์
เมื่อเขียนคลาสเป็นเรื่องปกติที่จะใช้ประโยชน์จากวัตถุอื่น คุณอาจมีการเชื่อมต่อฐานข้อมูลตัวอย่างหรือบริการอื่น ๆ ที่คุณใช้ วัตถุอื่น (หรือบริการ) เหล่านี้เป็นการอ้างอิง วิธีที่ง่ายที่สุดในการเขียนรหัสคือการสร้างและใช้วัตถุอื่น ๆ แต่นี่หมายความว่าวัตถุของคุณมีความสัมพันธ์ที่ยืดหยุ่นกับการพึ่งพาเหล่านั้น: ไม่ว่าคุณจะเรียกใช้วัตถุของคุณอย่างไรมันก็ใช้การพึ่งพาเหมือนกัน
เทคนิคที่มีประสิทธิภาพยิ่งขึ้นคือการสามารถสร้างวัตถุของคุณและมอบการอ้างอิงที่จะใช้ ดังนั้นคุณอาจสร้างการเชื่อมต่อฐานข้อมูลที่จะใช้แล้วส่งไปยังวัตถุของคุณ ด้วยวิธีนี้คุณสามารถสร้างวัตถุของคุณด้วยการขึ้นต่อกันที่แตกต่างกันในแต่ละช่วงเวลาทำให้วัตถุของคุณมีความยืดหยุ่นมากขึ้น นี่คือการฉีดพึ่งพาซึ่งคุณ "ฉีด" การพึ่งพาลงในวัตถุ
BTW: ในรูปแบบการนำเสนอที่ทันสมัยของการใช้ภาพถ่าย Flickr เพื่อแสดงให้เห็นถึงแนวคิดนี้อาจแสดงให้เห็นว่ามีคนติดยาเสพติดยิงตัวเองขึ้นมาด้วยยาเสพติด โอ้เดี๋ยวก่อนนั่นมันต้องพึ่งพาการฉีด ... โอเคขอโทษตลกไม่ดี
ฉันไม่รู้บทเรียนที่ง่าย แต่ฉันสามารถให้คุณเกือบ25 250 คำ - หรือ - รุ่นน้อย:
ด้วยการฉีดพึ่งพาวัตถุที่ไม่ได้กำหนดค่าองค์ประกอบของตัวเองตามสิ่งที่รู้แล้วค่อนข้างวัตถุที่มีการกำหนดค่าโดยตรรกะระดับที่สูงขึ้นและจากนั้นจะเรียกส่วนประกอบที่มันไม่ได้รู้ล่วงหน้าในตัว แนวคิดคือทำให้วัตถุมีส่วนประกอบมากขึ้นและมีแอปพลิเคชั่นน้อยลงย้ายที่ตั้งค่างานในระดับที่สูงขึ้น สิ่งนี้ทำให้วัตถุมีแนวโน้มที่จะมีประโยชน์ในอนาคตหรือด้วยการกำหนดค่าที่แตกต่างกัน
มันจะดีกว่าสำหรับการทดสอบมันจะดีกว่าเมื่อถึงเวลาที่ต้องแก้ไขแอปพลิเคชัน การใช้งานทั่วไปทำให้การกำหนดค่าใน XML และใช้กรอบการทำงานเพื่อโหลดคลาสแบบไดนามิก
เมื่อคุณได้รับ Nintendo ใหม่คุณสามารถใช้ปุ่มและหน้าจอสัมผัสเพื่อเล่นเกมได้
แต่ที่โรงงาน Nintendo พวกเขาจำเป็นต้องรู้วิธีการรวมเข้าด้วยกัน
เมื่อคนฉลาดที่โรงงานนำ Nintendo DS ออกมามันจะแตกต่างกัน แต่คุณจะรู้วิธีใช้งาน