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

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

ИНКАПСУЛЯЦИЯ ЗАПИСИ

Вот почему я часто предпочитаю объекты записям для изменяемых данных. С помощью объектов я могу скрыть то, что хранится, и предоставить методы для всех трех значений. Пользователю объекта не нужно знать или заботиться о том, что хранится, а что вычисляется. Эта инкапсуляция также помогает при переименовании: я могу переименовать поле, предоставляя методы как для нового, так и для старого имени, постепенно обновляя вызывающие объекты, пока все они не будут готовы.

ИНКАПСУЛЯЦИЯ КОЛЛЕКЦИИ

Мне нравится инкапсулировать любые изменяемые данные в моих программах. Это облегчает просмотр того, когда и как изменяются структуры данных, что упрощает изменение этих структур данных, когда мне это нужно. Инкапсуляция часто поощряется, особенно объектно-ориентированными разработчиками, но при работе с коллекциями возникает распространенная ошибка. Доступ к переменной коллекции может быть инкапсулирован, но если геттер возвращает саму коллекцию, то членство в этой коллекции может быть изменено без вмешательства включающего класса.

ЗАМЕНИТЬ ПРИМИТИВ ОБЪЕКТОМ

Часто на ранних стадиях разработки вы принимаете решения о представлении простых фактов в виде простых элементов данных, таких как числа или строки. По мере развития эти простые элементы перестают быть такими простыми. Некоторое время телефонный номер может быть представлен в виде строки, но позже ему потребуется специальное поведение для форматирования, извлечения кода города и т.п. Такая логика может быстро дублироваться в кодовой базе, увеличивая усилия всякий раз, когда ее необходимо использовать.

ЗАМЕНИТЬ TEMP С ЗАПРОСОМ

Одним из способов использования временных переменных является захват значения некоторого кода для последующего обращения к нему в функции. Использование temp позволяет мне ссылаться на значение, объясняя его значение и избегая повторения кода, который его вычисляет. Но хотя использование переменной удобно, часто бывает целесообразно пойти дальше и вместо этого использовать функцию.

ЭКСТРАКТНЫЙ КЛАСС

ِِВы, наверное, читали рекомендации о том, что класс должен быть четкой абстракцией, выполнять только несколько четких обязанностей и так далее. На практике классы растут. Здесь вы добавляете какие-то операции, там немного данных. Вы добавляете ответственности к классу, чувствуя, что он не стоит отдельного класса, но по мере того, как эта ответственность растет и размножается, класс становится слишком сложным. Скоро твой класс станет таким же хрустящим, как утка в микроволновке.

ВСТРОЕННЫЙ КЛАСС

Я использую встроенный класс, если класс больше не работает и не должен больше существовать. Часто это результат рефакторинга, который переносит другие обязанности из класса, поэтому его почти не остается. В этот момент я объединяю класс в другой — тот, который максимально использует класс ранта.

СКРЫТЬ ДЕЛЕГАТА

Один из ключей — если не ключ — к хорошему модульному дизайну — это инкапсуляция. Инкапсуляция означает, что модулям нужно меньше знать о других частях системы. Затем, когда что-то меняется, нужно сообщить об изменении меньшему количеству модулей, что упрощает внесение изменений.

УДАЛИТЬ СРЕДНЕГО ЧЕЛОВЕКА

Я говорил о преимуществах инкапсуляции использования делегированного объекта. За это есть цена. Каждый раз, когда клиент хочет использовать новую функцию делегата, мне приходится добавлять на сервер простой метод делегирования. После добавления функций на некоторое время меня раздражает вся эта переадресация. Класс сервера — это всего лишь посредник, и, возможно, клиенту пора напрямую вызывать делегат.

ЗАМЕНА АЛГОРИТМА

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

Заключить

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

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

Всегда программируйте так, как будто парень, который в конечном итоге будет поддерживать ваш код, будет жестоким психопатом, который знает, где вы живете. — Мартин Голдинг

Понравилась статья? Следуйте за мной!
Есть мнение или комментарий? Введи это!