ปัญหาพื้นฐานเดียวกันกับที่คุณมักจะได้รับจากการเขียนโปรแกรมเชิงวัตถุกฎสไตล์และทุกอย่างอื่น เป็นไปได้ - โดยทั่วไปแล้วในความเป็นจริง - ทำสิ่งที่เป็นนามธรรมมากเกินไปและเพื่อเพิ่มการเบี่ยงทางมากเกินไปและโดยทั่วไปจะใช้เทคนิคที่ดีมากเกินไปและผิดที่
ทุกรูปแบบหรือสิ่งก่อสร้างอื่น ๆ ที่คุณนำไปใช้นั้นนำมาซึ่งความซับซ้อน มีการกระจายข้อมูลที่เป็นนามธรรมและทางอ้อมในบางครั้งทำให้รายละเอียดที่ไม่เกี่ยวข้องออกไป แต่บางครั้งก็ทำให้เข้าใจยากขึ้นว่าเกิดอะไรขึ้น กฎทุกข้อที่คุณนำไปใช้นั้นจะทำให้เกิดความยืดหยุ่นได้ตัดสินใจออกทางเลือกที่อาจเป็นวิธีที่ดีที่สุด
จุดคือการเขียนโค้ดที่ทำหน้าที่ได้และมีความทนทานอ่านง่ายและบำรุงรักษาได้ คุณเป็นนักพัฒนาซอฟต์แวร์ - ไม่ใช่ผู้สร้างหอคอยงาช้าง
ลิงค์ที่เกี่ยวข้อง
http://thedailywtf.com/Articles/The_Inner-Platform_Effect.aspx
http://www.joelonsoftware.com/articles/fog0000000018.html
อาจเป็นรูปแบบที่ง่ายที่สุดของการฉีดพึ่งพา (อย่าหัวเราะ) เป็นพารามิเตอร์ รหัสที่ต้องพึ่งพานั้นขึ้นอยู่กับข้อมูลและข้อมูลนั้นถูกฉีดเข้าด้วยวิธีการส่งผ่านพารามิเตอร์
ใช่มันโง่และไม่ได้พูดถึงจุดที่ต้องพึ่งพาการฉีดแบบพึ่งพาวัตถุ แต่โปรแกรมเมอร์ที่ใช้งานได้จะบอกคุณว่า (ถ้าคุณมีฟังก์ชั่นชั้นหนึ่ง) นี่เป็นการฉีดแบบพึ่งพาที่คุณต้องการเท่านั้น จุดนี่คือการใช้ตัวอย่างเล็กน้อยและแสดงปัญหาที่อาจเกิดขึ้น
ให้ใช้ฟังก์ชั่นดั้งเดิมที่เรียบง่าย - ไวยากรณ์ C ++ ไม่ได้มีความหมายที่นี่
void Say_Hello_World ()
{
std::cout << "Hello World" << std::endl;
}
ฉันมีการพึ่งพาที่ฉันต้องการแยกออกและฉีด - ข้อความ "Hello World" ง่ายพอ ...
void Say_Something (const char *p_text)
{
std::cout << p_text << std::endl;
}
มีความยืดหยุ่นมากกว่าเดิมอย่างไร? ถ้าฉันตัดสินใจว่าเอาท์พุทควรเป็น Unicode ฉันอาจต้องการเปลี่ยนจาก std :: cout เป็น std :: wcout แต่นั่นหมายความว่าสายของฉันจะต้องเป็น wchar_t ไม่ใช่ของ char ไม่ว่าผู้โทรทุกคนจะต้องเปลี่ยนหรือ (มีเหตุผลมากกว่า) การใช้งานแบบเก่าจะถูกแทนที่ด้วยอะแดปเตอร์ที่แปลสตริงและเรียกการใช้งานใหม่
นั่นคืองานบำรุงรักษาที่นั่นซึ่งไม่จำเป็นหากเราเก็บต้นฉบับไว้
และถ้ามันดูไม่สำคัญลองดูที่ฟังก์ชั่นโลกแห่งความจริงจาก Win32 API ...
http://msdn.microsoft.com/en-us/library/ms632680%28v=vs.85%29.aspx
นั่นคือ 12 "การพึ่งพา" เพื่อจัดการกับ ตัวอย่างเช่นหากความละเอียดหน้าจอมีขนาดใหญ่มากเราอาจต้องใช้ค่าประสาน 64- บิตและ CreateWindowEx รุ่นอื่น และใช่แล้วยังมีเวอร์ชั่นเก่าที่ยังคงห้อยอยู่ซึ่งน่าจะถูกแมปกับเวอร์ชั่นใหม่กว่าเบื้องหลัง ...
http://msdn.microsoft.com/en-us/library/ms632679%28v=vs.85%29.aspx
"การพึ่งพา" เหล่านั้นไม่ได้เป็นเพียงปัญหาสำหรับนักพัฒนาดั้งเดิม - ทุกคนที่ใช้อินเทอร์เฟซนั้นต้องค้นหาว่าการอ้างอิงคืออะไรวิธีการที่พวกเขาระบุและสิ่งที่พวกเขาหมายถึงและหาสิ่งที่ต้องทำ นี่คือที่คำว่า "ค่าเริ่มต้นที่เหมาะสม" สามารถทำให้ชีวิตง่ายขึ้นมาก
หลักการในการฉีดพึ่งพาวัตถุไม่แตกต่างกันในหลักการ การเขียนคลาสเป็นค่าโสหุ้ยทั้งในซอร์สโค้ดข้อความและในช่วงเวลาของนักพัฒนาและถ้าคลาสนั้นถูกเขียนขึ้นเพื่อจัดหาการอ้างอิงตามข้อกำหนดคุณสมบัติของวัตถุที่ขึ้นต่อกันบางส่วนวัตถุที่อ้างอิงนั้นจะถูกล็อคเข้าสู่ส่วนต่อประสานนั้นแม้ว่าจะมีความต้องการ เพื่อแทนที่การใช้งานของวัตถุนั้น
ไม่ควรอ่านสิ่งนี้เนื่องจากอ้างว่าการฉีดการพึ่งพานั้นไม่ดี - ห่างไกลจากมัน แต่เทคนิคที่ดีสามารถนำไปใช้มากเกินไปและผิดที่ได้ เช่นเดียวกับที่ทุก ๆ สตริงไม่จำเป็นต้องถูกดึงออกมาและเปลี่ยนเป็นพารามิเตอร์ไม่ใช่พฤติกรรมระดับต่ำทุกอันที่ต้องถูกแยกออกจากวัตถุระดับสูงและกลายเป็นการพึ่งพาแบบฉีดได้