Модуль не должен знать о внутренностях объектов, которыми он манипулирует 💻
Читая легендарную книгу по программированию «Чистый код», я нашел этот закон, который и собираюсь нам объяснить 😀.
Этот закон был принят для улучшения программных систем, исключительно для объектно-ориентированного программирования.
В шапке статьи это упоминается, но…
Что это значит? 🤔
Ну, мы знаем, что объекты скрывают свои данные и выставляют функции для взаимодействия с внешним миром. Но иногда мы не держим его
Начнем с примера 👀
Мы начали определять наш класс и создали его экземпляр
Тогда, если мы хотим получить имя владельца, мы можем сделать это:
Такой код называется крушение поезда, потому что он выглядит как группа сцепленных вагонов поезда. Это будет то же самое, что и:
Это работает?… Да, но это плохая практика кодирования, и ее следует избегать.
Почему плохая практика кодирования? ❌
Поскольку мы нарушаем одну основную суть объектно-ориентированного программирования, то, что скрывает наши данные. В этом случае мы показали внутренности объекта модулю, который манипулирует объектом.
Давайте перечислим шаги:
1- Функция «owner()» возвращает объект «Гомер»
2- Модуль должен вызывать «name()», чтобы вернуть нужное нам значение
Мы обращаемся к объекту на один уровень ниже, чем объект, которым мы манипулировали ранее. В заключение мы показываем больше информации, чем необходимо
Обслуживание системы будет более сложным
Давайте представим, что мы хотим провести рефакторинг нашего кода, а именно объекта «Владелец».
Как мы видим, мы изменили функции, возвращающие имя владельца, потому что мы также изменили приватные переменные на «firstName» и «lastName».
По этой причине код должен быть рефакторинг
Это невозможно поддерживать, каждый вызов должен быть рефакторинг, а это очень дорого.
Как это исправить? 🛠
Вместо того, чтобы глубоко копаться в объекте в вызове, мы могли бы сделать так, чтобы объект, который мы вызываем, возвращал нам все данные, которые мы хотим 😁
Или добавьте «firstName()» и «lastName()».
В обоих случаях вызов будет одинаковым.
Теперь обслуживание системы проще, чем раньше 🎉🎉
В этом законе также есть еще одна фраза, которая говорит
«Разговаривайте только со своими ближайшими друзьями и не разговаривайте с незнакомцами».
То, что он ранее сказал, это то, что мы сделали, мы поделились этим с ближайшими друзьями (с классом) и не разговариваем с незнакомцами (мы не позволяем им заглянуть внутрь объекта)
Вывод 😉
«Закон Деметры» полезен для поддержки системного программного обеспечения и защиты принципов объектно-ориентированного программирования. Я приглашаю вас использовать его и прочитать книгу «Чистый код», замечательную книгу ❤.
Спасибо дочитал до конца! 😁👏👏