التعريف: يجب أن يحافظ كائن واحد على أقل فهم للكائنات الأخرى.
أصل المشكلة: كلما اقتربت العلاقة بين الطبقات ، زادت درجة الاقتران ، وعندما تتغير فئة واحدة ، زاد التأثير على فئة أخرى.
الحل: تقليل الاقتران بين الفصول.
منذ أن بدأنا في تعلم البرمجة ، عرفنا المبادئ العامة لبرمجة البرمجيات: الاقتران المنخفض ، والتماسك العالي. سواء كانت برمجة موجهة نحو العملية أو الموجهة نحو الكائن ، يمكن تحسين معدل إعادة استخدام الكود فقط عن طريق الحفاظ على الاقتران بين كل وحدة منخفضة قدر الإمكان. مزايا الاقتران المنخفض هي بديهية ، ولكن كيف يمكنك البرمجة لتحقيق اقتران منخفض؟ هذا بالضبط ما ستحققه قاعدة Dimit.
تم اقتراح قانون Dimitter ، المعروف أيضًا باسم مبدأ أقل المعرفة ، لأول مرة في عام 1987 من قبل إيان هولندا من جامعة نورث إيسترن في الولايات المتحدة. من حيث Layman ، كلما كنت تعرف عن الفصل الذي يعتمد عليه ، كان ذلك أفضل. بمعنى آخر ، بالنسبة للفئة التابعة ، بغض النظر عن مدى تعقيد المنطق ، حاول تغليف المنطق داخل الفصل ، ولا تسرب أي معلومات إلى الخارج باستثناء الطريقة العامة المقدمة. تحتوي قاعدة Dimit أيضًا على تعريف أبسط: التواصل فقط مع الأصدقاء المباشرين. أولاً ، دعنا نوضح ماهية الصديق المباشر: سيكون لكل كائن علاقة مقترنة مع كائنات أخرى. طالما أن هناك علاقة اقتران بين الكائنين ، سنقول أن هذين الكائنين هما علاقة صديق. هناك العديد من الطرق للزوجين ، مثل التبعية ، والجمعيات ، والمجموعة ، والتجميع ، وما إلى ذلك ، ندعو الفصل في متغير العضو ، معلمات الطريقة ، وقيمة إرجاع الطريقة التي تظهر كأصدقاء مباشرين ، في حين أن الفصل في المتغير المحلي ليس أصدقاء مباشرين. بمعنى آخر ، من الأفضل عدم الظهور داخل الفصل كمتغير محلي.
فيما يلي مثال على انتهاك مبدأ Dimit:
مدرس الطبقة العامة {public void teacher (فصول الدروس) {classes.getStudents.getScore.show () ؛ }}
ما هي المشاكل؟ اقتران مرتفع جدا.
1. قد يتم إلغاء فصل الدرجات في فصل الطلاب.
2. يمكن أيضًا حذف طريقة العرض لفئة الدرجات.
فصول الطلاب وفصول الدرجات كلها غير مألوفة لك ، وقد لا تعرف متى يتغيرون.
يمكننا تعديلها إلى:
مدرس الطبقة العامة {public void teacher (فصول الدروس) {classes.showscore () ؛ }} فئات الفئة العامة {public void showcore (student student) {student.showscore () ؛ }} طالب الفئة العامة {نقاط نقاط ؛ public void Showcore () {Score = New Score (80) ؛ Score.show () ؛ }}
تلخيص:
1. ميزة قانون ديميت هي تقليل الاقتران بين الطبقات.
2. العيب هو أنه سيؤدي إلى المزيد من الطرق الصغيرة ، مما يجعل النظام أكثر فوضى وسيتم تقليل كفاءة الاتصال.
3. التطبيقات في وضع التصميم: وضع الواجهة (وضع الواجهة) ووضع الوسيط (وضع الوسيط).