ไม่วิธีกฎหมายของ Demeterนำไปใช้กับระบบเชิงวัตถุด้วยการมีเพศสัมพันธ์และการทำงานร่วมกัน?
ฉันกำลังอ่านหนังสือ "การพัฒนาซอฟต์แวร์และการฝึกฝนอย่างมืออาชีพ" และพบบทเกี่ยวกับ LoD และอยากรู้ว่าหลักการนั้นถูกนำไปใช้กับระบบเชิงวัตถุอย่างไร
ไม่วิธีกฎหมายของ Demeterนำไปใช้กับระบบเชิงวัตถุด้วยการมีเพศสัมพันธ์และการทำงานร่วมกัน?
ฉันกำลังอ่านหนังสือ "การพัฒนาซอฟต์แวร์และการฝึกฝนอย่างมืออาชีพ" และพบบทเกี่ยวกับ LoD และอยากรู้ว่าหลักการนั้นถูกนำไปใช้กับระบบเชิงวัตถุอย่างไร
คำตอบ:
ตามที่อีเมอร์เซโดกฎหมายของ Demeterกล่าวต่อไปนี้:
สิ่งนี้สอดคล้องโดยตรงกับหลักการของการมีเพศสัมพันธ์ต่ำในขณะที่หน่วย (หรือวัตถุ) ควรจะเป็นเช่นเดียวกับด้านบน:
หนึ่งในรูปแบบที่ต่ำที่สุดของการมีเพศสัมพันธ์คือการส่งข้อความคือข้อมูลที่ใช้ร่วมกันระหว่างวัตถุผ่านวิธีการโทรด้วยพารามิเตอร์
นอกจากนี้จากสิ่งที่ฉันเห็นกฎของ Demeter ไม่ตรงกับหลักการของการติดต่อกันสูงโดยตรงเนื่องจากระบุเฉพาะวัตถุที่ตัวเองควรรู้ว่าข้อมูลที่พวกเขามีตัวเอง วัตถุที่มีการติดต่อกันต่ำมีสมาชิกข้อมูลที่ไม่ได้ใช้บ่อยในวิธีการของตนเอง มันเกี่ยวกับเนื้อหาของวัตถุมากกว่าความสัมพันธ์และการทำงานร่วมกันของวัตถุ
การเชื่อมต่อง่ายขึ้น
เมื่อวัตถุเรียกเมธอดคุณสมบัติและอื่น ๆ ของวัตถุอื่นที่เราพูดว่าวัตถุนั้นเชื่อมโยงกัน เราเรียกมันว่าการมีเพศสัมพันธ์เพราะตอนนี้calleeไม่สามารถเปลี่ยนอะไรเกี่ยวกับวิธีการของตัวเอง / ไม้ค้ำยัน w.out ทำลายโทร
ดังนั้นยิ่งการแต่งงานกัน - วิธีประกอบฉาก - ยิ่งยากที่จะเปลี่ยนรหัสcalleeโดยไม่ทำลายรหัสทั้งหมดที่ใช้งาน
ใคร่ครวญการมีเพศสัมพันธ์
ความรู้ส่วนใหญ่ทำให้การมีเพศสัมพันธ์บ้า
ที่นี่เรามีEmployee
ที่มีPerson
ที่อยู่ 'ที่อยู่'
public class Employee {
public Person me = new Person();
}
public class Person {
public Address home = new Address();
}
public class Address {
public string street;
}
ในการรับถนนฉันต้องโทร: myEmployee.me.home.street
. นี่คือ 180 องศาตรงข้ามกับหลักการของความรู้น้อยที่สุด ฉันต้องรู้เกี่ยวกับ internals โครงสร้างคอมโพสิตของEmployee
, Person
และAddress
ชั้นเรียน
การออกแบบชั้นที่มีข้อบกพร่องนี้บังคับให้ฉันรู้เกี่ยวกับชั้นเรียนเหล่านั้นทั้งหมดและทำให้myEmployee.me.home.street
ฉัน (วัตถุที่เรียก) ไปยังชั้นเรียนไม่น้อยกว่า 3 ชั้น - เพื่อรับเพียงคุณสมบัติเดียว!
ความรู้น้อยประหยัดทั้งวัน
ถ้าฉันพูดกับEmployee
ชั้นเรียนที่ฉันใช้หลักการความรู้น้อยที่สุดต่อ se และโดยการทำเช่นนั้นเราจะจำกัด การแต่งงานโดยเฉพาะกับชั้นเรียนนั้นโดยอัตโนมัติและในเวลาเดียวกันก็แยกการมีเพศสัมพันธ์กับชั้นเรียนนั้น
โดยการเพิ่มคุณสมบัติที่จำเป็นทั้งหมดในEmployee
ชั้นเรียนเราจะแก้ไขข้อต่อ
ดังนั้น
public class Employee {
public Person me = new Person();
public string street { return me.home.street; }
}
อนุญาตให้ฉันโทร: myEmployee.street
-
Employee
Employee
- ไม่ว่าโครงสร้างของมันจะซับซ้อนแค่ไหนความรู้น้อยที่สุดตลอดทาง
เราแยก myEmployee ของฉันออกจากPerson
และAddress
และเราควรใช้ความรู้น้อยที่สุดโดยการเพิ่มการส่งผ่านคุณสมบัติเช่นEmployee
พูดคุยPerson
และPerson
พูดคุยกับAddress
การศึกษา ( V. Basili, L. Briand และ WL Melo การตรวจสอบความถูกต้องของตัวชี้วัดการออกแบบเชิงวัตถุเป็นตัวบ่งชี้คุณภาพ ) ได้แสดงให้เห็นว่าคลาสที่มีชุดการตอบสนองที่ใหญ่กว่านั้นมีแนวโน้มที่จะสร้างข้อผิดพลาดมากกว่าคลาสที่ หมายถึงโอกาสของการแต่งงานที่สูงขึ้น
ค่าของกฎหมายของ Demeter คือมันลดการตอบสนองที่กำหนดโดยคำจำกัดความ วิธีการของวัตถุสามารถเรียกใช้วิธีการของตัวเองเท่านั้นพารามิเตอร์ใด ๆ ที่ส่งผ่านไปยังวิธีการวิธีการของวัตถุใด ๆ ที่มันสร้างขึ้นและวิธีการของวัตถุที่จัดขึ้นโดยตรง เนื่องจากชุดตอบกลับมีขนาดเล็กลงจึงมีโอกาสน้อยลงในการมีเพศสัมพันธ์สูง เนื่องจากโมดูล / เมธอดใช้การอ้างอิงที่มีอยู่ในทันทีเท่านั้นจึงมีการเชื่อมโยงที่สูงกว่า
มันค่อนข้างง่าย พูด A ขึ้นอยู่กับ B และ B ขึ้นอยู่กับ C. หากไม่มีกฎหมายของ Demeter คุณสามารถใช้ทั้ง B และ C ใน A แต่โดยการปฏิบัติตามกฎหมายนี้ A ขึ้นอยู่กับ B เท่านั้นมันไม่สามารถพึ่งพา C ได้
สิ่งนี้ช่วยให้การมีเพศสัมพันธ์ต่ำเนื่องจากช่วยลดจำนวนการพึ่งพาของโมดูลได้อย่างมาก การทำงานร่วมกันแม้ว่าจะมีแนวคิดที่แตกต่างจากการแต่งงานกันก็สามารถทำได้ในลักษณะเดียวกัน ด้วยการพึ่งพาโมดูลที่น้อยลงสิ่งเหล่านี้จะมีความเฉพาะเจาะจงมากขึ้นสำหรับโมดูลนั้นและเพิ่มการเชื่อมโยงกัน จำนวนรวมของโมดูลจะเพิ่มขึ้นและพวกเขาจะมีความเชี่ยวชาญมากขึ้นสำหรับการทำสิ่งที่พิเศษสำหรับโมดูลขึ้นอยู่กับ (ตรงกันข้ามกับวัตถุพระเจ้า) ซึ่งแปลโดยตรงไปยังระบบที่เชื่อมโยงกันมากขึ้น