หลักการผกผันของการพึ่งพา: วิธีกำหนด“ นโยบายระดับสูง” และ“ รายละเอียดระดับต่ำ” ให้ผู้อื่นได้อย่างไร


13

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

คำตอบ:


11

หมายเหตุ: สิ่งนี้ได้ถูกเขียนใหม่อย่างสมบูรณ์จากตัวอย่างก่อนหน้าของฉัน

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

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

ตอนนี้ถ้าคุณมีอุปกรณ์ที่ไม่ต้องการไฟ AC - บางทีมันอาจทำงานบนวงจร 7V DC - คุณยังคงสามารถใช้นโยบายระดับสูงนั้นได้คุณเพียงแค่ต้องใช้อะแดปเตอร์ระหว่างแหล่งจ่ายไฟและอุปกรณ์ และเนื่องจากทุกคนมีนโยบายระดับสูงเดียวกันผู้ผลิตจึงสามารถสร้างสิ่งนั้นขึ้นมาใช้งานได้โดยไม่ต้องเปลี่ยนแปลงนโยบายระดับสูง บุคคลที่เชื่อมต่อการใช้งานกับนโยบาย (คุณเสียบแล็ปท็อปของคุณ) ไม่จำเป็นต้องเข้าใจเช่นกัน

เพิ่มเติมหากผู้ผลิตต้องการขายอุปกรณ์เดียวกันในประเทศอื่นสิ่งที่พวกเขาต้องทำคือพัฒนาอะแดปเตอร์ที่แตกต่างกัน ดังนั้นการนำไปปฏิบัติเดียวกันสามารถทำงานได้กับหลายนโยบายในขณะที่นโยบายเดียวกันสามารถเรียกใช้การใช้งานได้หลายอย่าง

นี่คือตัวอย่างที่สมบูรณ์แบบของการผกผันของการพึ่งพา

แต่นี่เป็นบิตที่น่าสนใจ: กลับไปที่สิ่งที่ฉันพูดครั้งแรก "ไม่สำคัญว่าคุณจะรับกระแสไฟฟ้าจากที่ไหน" นี่เป็นรายละเอียดการใช้งาน นโยบายระดับสูงยังคงมีปลั๊กไฟทั้งหมดที่มีรูปร่างเหมือนกันและปล่อยพลังงานชนิดเดียวกัน รายละเอียดการใช้งานในระดับต่ำเป็นทั้งที่มาจากไฟฟ้าและสิ่งที่มันทำงาน

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

อาจใช้อะแดปเตอร์เพื่อให้เหมาะกับการใช้งานเดียวกันกับนโยบายที่แตกต่างกัน


+1 Crikey ไม่ทราบว่าฉันได้เรียนรู้อย่างมากจากช่องเสียบไฟง่าย :)
dreza

7

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

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

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


1
ไม่มาก การผกผันเกิดขึ้นเนื่องจากระดับที่ต่ำกว่านั้นขึ้นอยู่กับส่วนต่อประสาน การใช้หลักการแยกส่วนต่อประสาน (I in SOLID) ส่วนต่อประสานนั้นเป็นของลูกค้า ดังนั้นระดับที่ต่ำกว่าเชิงเปรียบเทียบจึงขึ้นกับลูกค้า
Michael Brown

2
@ MikeBrown: นั่นเป็นมุมมองหนึ่งที่เป็นไปได้ ฉันชอบมุมมองที่ส่วนต่อประสานไม่ได้เป็นของ A หรือ B แต่เป็นโครงสร้างพื้นฐานหรือสภาพแวดล้อมของ A และ B
Doc Brown เมื่อ

1

ฉันใช้ภาพง่าย ๆ เพื่ออธิบายกรมทรัพย์สินทางปัญญา มุมมองแบบคลาสสิกของการพัฒนาซอฟต์แวร์เป็นกระบวนการก่อสร้างโดยแต่ละชั้นจะอยู่ด้านบนสุดของชั้นล่างที่รองรับ การใช้หลักการผกผันของการพึ่งพานั้นเปรียบเสมือนการสร้างมือถือห้อยมือถือ

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


+1 สำหรับการเปรียบเทียบที่ดี ในภาพนี้คุณอาจเห็นจุดของฉัน - เลเยอร์ทั้งหมดขึ้นอยู่กับอินเทอร์เฟซ แต่ไม่ลดเลเยอร์ที่สูงกว่าหรือในทางกลับกัน
Doc Brown

ฉันเห็นสิ่งที่คุณกำลังพูดว่าอินเทอร์เฟซนั้นไม่ได้สูงหรือต่ำกว่า
Michael Brown

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

1
(และในความเป็นจริงคุณสามารถสร้างโทรศัพท์มือถือใหม่ทั้งหมดจากวัสดุที่แตกต่างกันและแขวนประดับที่เหมือนกัน - ซึ่งเป็นจุดของ Doc Brown)
pdr
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.