Модуль не должен знать о внутренностях объектов, которыми он манипулирует 💻

Читая легендарную книгу по программированию «Чистый код», я нашел этот закон, который и собираюсь нам объяснить 😀.

Этот закон был принят для улучшения программных систем, исключительно для объектно-ориентированного программирования.

В шапке статьи это упоминается, но…

Что это значит? 🤔

Ну, мы знаем, что объекты скрывают свои данные и выставляют функции для взаимодействия с внешним миром. Но иногда мы не держим его

Начнем с примера 👀

Мы начали определять наш класс и создали его экземпляр

Тогда, если мы хотим получить имя владельца, мы можем сделать это:

Такой код называется крушение поезда, потому что он выглядит как группа сцепленных вагонов поезда. Это будет то же самое, что и:

Это работает?… Да, но это плохая практика кодирования, и ее следует избегать.

Почему плохая практика кодирования? ❌

Поскольку мы нарушаем одну основную суть объектно-ориентированного программирования, то, что скрывает наши данные. В этом случае мы показали внутренности объекта модулю, который манипулирует объектом.

Давайте перечислим шаги:

1- Функция «owner()» возвращает объект «Гомер»

2- Модуль должен вызывать «name()», чтобы вернуть нужное нам значение

Мы обращаемся к объекту на один уровень ниже, чем объект, которым мы манипулировали ранее. В заключение мы показываем больше информации, чем необходимо

Обслуживание системы будет более сложным

Давайте представим, что мы хотим провести рефакторинг нашего кода, а именно объекта «Владелец».

Как мы видим, мы изменили функции, возвращающие имя владельца, потому что мы также изменили приватные переменные на «firstName» и «lastName».

По этой причине код должен быть рефакторинг

Это невозможно поддерживать, каждый вызов должен быть рефакторинг, а это очень дорого.

Как это исправить? 🛠

Вместо того, чтобы глубоко копаться в объекте в вызове, мы могли бы сделать так, чтобы объект, который мы вызываем, возвращал нам все данные, которые мы хотим 😁

Или добавьте «firstName()» и «lastName()».

В обоих случаях вызов будет одинаковым.

Теперь обслуживание системы проще, чем раньше 🎉🎉

В этом законе также есть еще одна фраза, которая говорит

«Разговаривайте только со своими ближайшими друзьями и не разговаривайте с незнакомцами».

То, что он ранее сказал, это то, что мы сделали, мы поделились этим с ближайшими друзьями (с классом) и не разговариваем с незнакомцами (мы не позволяем им заглянуть внутрь объекта)

Вывод 😉

«Закон Деметры» полезен для поддержки системного программного обеспечения и защиты принципов объектно-ориентированного программирования. Я приглашаю вас использовать его и прочитать книгу «Чистый код», замечательную книгу ❤.

Спасибо дочитал до конца! 😁👏👏