กฎหมายของ Demeter นำไปใช้กับระบบเชิงวัตถุเกี่ยวกับการมีเพศสัมพันธ์และการทำงานร่วมกันได้อย่างไร? [ปิด]


15

ไม่วิธีกฎหมายของ Demeterนำไปใช้กับระบบเชิงวัตถุด้วยการมีเพศสัมพันธ์และการทำงานร่วมกัน?

ฉันกำลังอ่านหนังสือ "การพัฒนาซอฟต์แวร์และการฝึกฝนอย่างมืออาชีพ" และพบบทเกี่ยวกับ LoD และอยากรู้ว่าหลักการนั้นถูกนำไปใช้กับระบบเชิงวัตถุอย่างไร


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

คำตอบ:


9

ตามที่อีเมอร์เซโดกฎหมายของ Demeterกล่าวต่อไปนี้:

  • แต่ละหน่วยควรมีความรู้ที่ จำกัด เฉพาะเกี่ยวกับหน่วยอื่น ๆ : เฉพาะหน่วย "อย่างใกล้ชิด" ที่เกี่ยวข้องกับหน่วยปัจจุบัน
  • แต่ละหน่วยควรพูดคุยกับเพื่อนเท่านั้น อย่าคุยกับคนแปลกหน้า
  • พูดคุยกับเพื่อนของคุณทันที

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

  • ไม่คู่กันอย่างแน่นหนา เฉพาะคนที่อยู่ใกล้ที่สุดเท่านั้น
  • แต่ละคนควรพูดคุยกับผู้ทำงานร่วมกันเท่านั้นและไม่ควรพูดคุยกับผู้ทำงานร่วมกันของผู้ทำงานร่วมกัน
  • พูดคุยกับวัตถุที่ทำงานร่วมกันได้ทันที

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

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


8

การเชื่อมต่อง่ายขึ้น

เมื่อวัตถุเรียกเมธอดคุณสมบัติและอื่น ๆ ของวัตถุอื่นที่เราพูดว่าวัตถุนั้นเชื่อมโยงกัน เราเรียกมันว่าการมีเพศสัมพันธ์เพราะตอนนี้calleeไม่สามารถเปลี่ยนอะไรเกี่ยวกับวิธีการของตัวเอง / ไม้ค้ำยัน w.out ทำลายโทร

ดังนั้นยิ่งการแต่งงานกัน - วิธีประกอบฉาก - ยิ่งยากที่จะเปลี่ยนรหัสcalleeโดยไม่ทำลายรหัสทั้งหมดที่ใช้งาน

ใคร่ครวญการมีเพศสัมพันธ์

  • การอ้างถึงแม้แต่เสาเดียววิธีการคู่วัตถุสองอย่าง
  • เห็นได้ชัดว่าการแต่งงานกันเป็นสิ่งจำเป็นสำหรับการสร้างซอฟต์แวร์
  • เมื่อพิจารณาจากลักษณะ 'ขั้นตอนล็อค' ของการแต่งงานกันเราต้องการ จำกัด และแยกมันออก เป้าหมายนี้จะไปพร้อมกับซอฟต์แวร์ทั่วไป หลักการ
  • วัตถุที่น้อยลงที่เราต้องพูดคุยคือการมีเพศสัมพันธ์ที่ต่ำกว่า
  • ถ้าฉันต้องการจะบอกว่า 20 วิธีการที่แตกต่างกันเรียกการมีเพศสัมพันธ์ที่ต่ำกว่าถ้าการเรียกทั้งหมด 20 ไปยังหนึ่งคลาส / วัตถุรองวิธีเดียวกันเหล่านั้นแพร่กระจายไปทั่วหลายชั้น / วัตถุ

ความรู้ส่วนใหญ่ทำให้การมีเพศสัมพันธ์บ้า

ที่นี่เรามี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-

  1. ฉัน "รู้" เท่านั้น Employee
  2. ฉันเข้าคู่เท่านั้นEmployee- ไม่ว่าโครงสร้างของมันจะซับซ้อนแค่ไหน

ความรู้น้อยที่สุดตลอดทาง

เราแยก myEmployee ของฉันออกจากPersonและAddressและเราควรใช้ความรู้น้อยที่สุดโดยการเพิ่มการส่งผ่านคุณสมบัติเช่นEmployeeพูดคุยPersonและPersonพูดคุยกับAddress


1

การศึกษา ( V. Basili, L. Briand และ WL Melo การตรวจสอบความถูกต้องของตัวชี้วัดการออกแบบเชิงวัตถุเป็นตัวบ่งชี้คุณภาพ ) ได้แสดงให้เห็นว่าคลาสที่มีชุดการตอบสนองที่ใหญ่กว่านั้นมีแนวโน้มที่จะสร้างข้อผิดพลาดมากกว่าคลาสที่ หมายถึงโอกาสของการแต่งงานที่สูงขึ้น

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


1
การศึกษา ( Anquetil, N. และ Laval, J. การปรับโครงสร้างซอฟต์แวร์แบบเดิม: การวิเคราะห์กรณีที่เป็นรูปธรรม ) ยังแสดงให้เห็นว่าการลดการแต่งงานและการเพิ่มการทำงานร่วมกันไม่ได้ส่งผลให้คุณภาพดีขึ้นเสมอไป การศึกษาขนาดเล็กเพียงครั้งเดียวถือว่าเป็นอันตราย

0

มันค่อนข้างง่าย พูด A ขึ้นอยู่กับ B และ B ขึ้นอยู่กับ C. หากไม่มีกฎหมายของ Demeter คุณสามารถใช้ทั้ง B และ C ใน A แต่โดยการปฏิบัติตามกฎหมายนี้ A ขึ้นอยู่กับ B เท่านั้นมันไม่สามารถพึ่งพา C ได้

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

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