คำจำกัดความ: วัตถุหนึ่งควรรู้น้อยที่สุดเกี่ยวกับวัตถุอื่น ๆ
แนวคิดหลักของกฎของ Dimitri คือการแยกแยะระหว่างชั้นเรียนและการมีเพศสัมพันธ์ที่อ่อนแอ หลังจากการมีเพศสัมพันธ์ที่อ่อนแอสามารถปรับปรุงการใช้ซ้ำของชั้นเรียนได้
คำอุปมาที่สดใสกว่านั้นคล้ายกับ: นักโทษในคุกไม่ควรติดต่อผู้คนภายนอกแน่นอนว่าอาจมีญาติไปเยี่ยม เรือนจำที่นี่คือชั้นเรียนนักโทษที่อยู่ภายในเป็นข้อมูลภายในชั้นเรียนและเจ้าหน้าที่เรือนจำในคุกนั้นเทียบเท่ากับผู้บังคับใช้กฎหมาย Dimit
กฎหมายของ Dimit อ้างว่า:
(1) ในแง่ของการแบ่งชั้นเรียนชั้นเรียนที่มีการมีเพศสัมพันธ์ที่อ่อนแอควรถูกสร้างขึ้น
(2) ในการออกแบบโครงสร้างของชั้นเรียนแต่ละชั้นควรลดสิทธิการเข้าถึงของสมาชิกให้น้อยที่สุด
(3) ในการออกแบบชั้นเรียนถ้าเป็นไปได้ชั้นเรียนควรได้รับการออกแบบเป็นคลาสที่ไม่เปลี่ยนแปลง
(4) ในแง่ของการอ้างอิงถึงคลาสอื่น ๆ การอ้างอิงของวัตถุไปยังวัตถุอื่น ๆ ควรย่อให้เล็กสุด;
(5) พยายามลดสิทธิ์การเข้าถึงในชั้นเรียนให้น้อยที่สุด
(6) ใช้ฟังก์ชั่นการทำให้เป็นอนุกรมด้วยความระมัดระวัง
(7) อย่าเปิดเผยสมาชิกในชั้นเรียน แต่ให้ผู้เข้าร่วมที่เกี่ยวข้อง (คุณสมบัติ)
เพื่อให้ตัวอย่าง: มี บริษัท กลุ่มและหน่วยรองมีสาขาและแผนกตรง ตอนนี้จำเป็นต้องพิมพ์รหัสพนักงานของหน่วยรองทั้งหมด ก่อนอื่นให้ดูที่การออกแบบที่ละเมิดกฎ Dimit
// หัวหน้าพนักงานระดับสำนักงานใหญ่ {รหัสสตริงส่วนตัว; โมฆะสาธารณะ setId (String id) {this.id = id; } สตริงสาธารณะ getId () {return id; }} // คลาสพนักงานสาขาย่อย subemployee {รหัสสตริงส่วนตัว; โมฆะสาธารณะ setId (String id) {this.id = id; } สตริงสาธารณะ getId () {return id; }} คลาส SubCompanyManager {รายการสาธารณะ <Eblomployee> getAlleMployee () {รายการ <Subployee> list = arrayList ใหม่ <Ememployee> (); สำหรับ (int i = 0; i <100; i ++) {subemployee emp = subemployee ใหม่ (); // กำหนด ID ให้กับบุคลากรสาขาเพื่อจัดลำดับ emp.setId ("สาขา"+i); list.add (EMP); } return list; }} class CompanyManager {รายการสาธารณะ <Spopentee> getAlleMployee () {รายการ <SPOTHEREE> list = new ArrayList <S Employee> (); สำหรับ (int i = 0; i <30; i ++) {พนักงาน emp = พนักงานใหม่ (); // กำหนด ID ให้กับบุคลากรสำนักงานใหญ่เพื่อสั่ง emp.setId ("บริษัท หัวหน้า"+i); list.add (EMP); } return list; } โมฆะสาธารณะ printalleMployee (SubCompanyManager ย่อย) {รายการ <Employee> list1 = sub.getAlleMployee (); สำหรับ (subemployee e: list1) {system.out.println (e.getId ()); } รายการ <SPOTHEREE> liST2 = this.getAleLemployee (); สำหรับ (พนักงาน e: list2) {system.out.println (e.getId ()); }}} ไคลเอนต์คลาสสาธารณะ {โมฆะคงที่สาธารณะหลัก (สตริง [] args) {CompanyManager e = new CompanyManager (); E.printalleMployee (ใหม่ subcompanyManager ()); - ปัญหาหลักของการออกแบบนี้อยู่ใน CompanyManager ตามกฎหมายของ Dimit มีเพียงการสื่อสารกับเพื่อนโดยตรงเท่านั้นที่เกิดขึ้นและคลาส Subemployee ไม่ได้เป็นเพื่อนโดยตรงของคลาส บริษัท (การมีเพศสัมพันธ์ที่ปรากฏเป็นตัวแปรท้องถิ่นไม่ได้เป็นของเพื่อนโดยตรง) การพูดอย่างมีเหตุผลสำนักงานใหญ่จะต้องเชื่อมต่อกับสาขาและไม่มีการเชื่อมต่อกับพนักงานสาขา การออกแบบนี้เห็นได้ชัดว่าเพิ่มการมีเพศสัมพันธ์ที่ไม่จำเป็น ตามกฎหมายของ Dimit ควรหลีกเลี่ยงการมีเพศสัมพันธ์กับเพื่อนทางอ้อมในชั้นเรียน รหัสที่แก้ไขมีดังนี้:
คลาส SubCompanyManager {รายการสาธารณะ <Ebloployee> getAlleMployee () {list <subemployee> list = arrayList ใหม่ <Ememployee> (); สำหรับ (int i = 0; i <100; i ++) {subemployee emp = subemployee ใหม่ (); // กำหนด ID ให้กับบุคลากรสาขาเพื่อจัดลำดับ emp.setId ("สาขา"+i); list.add (EMP); } return list; } โมฆะสาธารณะ printemployee () {list <subemployee> list = this.getalleMployee (); สำหรับ (subemployee e: list) {system.out.println (e.getId ()); }}} class CompanyManager {รายการสาธารณะ <Spopentee> getAlleMployee () {รายการ <SpoverEE> list = new ArrayList <MARYEE> (); สำหรับ (int i = 0; i <30; i ++) {พนักงาน emp = พนักงานใหม่ (); // กำหนด ID ให้กับบุคลากรสำนักงานใหญ่เพื่อสั่ง emp.setId ("บริษัท หัวหน้า"+i); list.add (EMP); } return list; } โมฆะสาธารณะ printalleMployee (subcompanyManager ย่อย) {sub.printemployee (); รายการ <SPOTHEREE> liST2 = this.getAleLemployee (); สำหรับ (พนักงาน e: list2) {system.out.println (e.getId ()); - หลังจากการดัดแปลงวิธีการพิมพ์ ID บุคลากรถูกเพิ่มเข้าไปในสาขาและสำนักงานใหญ่เรียกมันโดยตรงเพื่อพิมพ์ดังนั้นจึงหลีกเลี่ยงการมีเพศสัมพันธ์กับพนักงานสาขา
ความตั้งใจดั้งเดิมของกฎหมาย dimitter คือการลดการมีเพศสัมพันธ์ระหว่างชั้นเรียน เนื่องจากแต่ละชั้นเรียนลดการพึ่งพาที่ไม่จำเป็นจึงเป็นไปได้ที่จะลดความสัมพันธ์ที่มีเพศสัมพันธ์ แต่ทุกอย่างมีมาตรฐานของตัวเอง แม้ว่าจะสามารถหลีกเลี่ยงการสื่อสารกับประเภททางอ้อมเพื่อที่จะสื่อสารคุณจะติดต่อสาขาผ่าน "ตัวกลาง" อย่างหลีกเลี่ยงไม่ได้ ตัวอย่างเช่นในกรณีนี้สำนักงานใหญ่ติดต่อพนักงานสาขาผ่านสาขาเป็น "ตัวกลาง" การใช้หลักการลดทอนมากเกินไปจะส่งผลให้มีตัวกลางและคลาสการส่งผ่านจำนวนมากส่งผลให้เกิดความซับซ้อนของระบบมากขึ้น ดังนั้นเมื่อใช้กฎหมาย DIMITR เราจะต้องชั่งน้ำหนักการแลกเปลี่ยนซ้ำ ๆ ซึ่งไม่เพียง แต่ทำให้มั่นใจได้ว่าโครงสร้างที่ชัดเจน แต่ยังต้องมีการทำงานร่วมกันสูงและการมีเพศสัมพันธ์ต่ำ