4 принципа проектирования в программировании
Сколько раз вы были в ситуации, когда вы хотели добавить новую функцию в свое приложение, но не могли, потому что оно оказалось жестким? Сколько раз вам приходилось переписывать код, чтобы сделать его тестируемым? Сколько раз вам приходилось добавлять больше кода, чтобы сделать его оптимальным для мобильных устройств?
Все сводится к принципам проектирования. Сейчас мы рассмотрим 4 принципа проектирования, которые необходимо знать всем программистам.
1. Разделяй и властвуй
Один из основных принципов в решении любой проблемы, включая проектирование системы, - разделять и властвовать. Это означает разбиение проблемы на более мелкие подзадачи. Идея заключается в том, что эти проблемы трудно решить из-за их сложности. Чтобы упростить задачу, вы можете разделить эти проблемы на более мелкие. Решение этих меньших задач облегчит решение более крупной проблемы в долгосрочной перспективе.
Думайте о проблеме как о матрешке.
2. Повышай связность (cohesion)
Связность означает объединение вещей, которые имеют смысл вместе - как бы в один пакет. С точки зрения разработки, вы можете согласованно проектировать свои пакеты, модули или классы. Подумайте, например, о математическом пакете в Python. Математический пакет является связным, потому что в нем есть все, что связано с математическими операциями. Вы не найдете в нем ничего не математического.
Связность приводит к организации вашего кода, и это значительно упростит поиск, тем самым упростив систему. Во всем будет больше смысла. Таким образом, вы не будете заходить в пакет словарей в поисках функций, связанных с машинным обучением, или чего-то подобного.
3. Снижай зацепление (coupling)
Проще говоря, зацепление происходит, когда пакеты, модули, классы или файлы очень взаимозависимы. Это не лучшая реализация любой системы. Если в одном пакете есть какие-то изменения или он сломается, вся система может быть скомпрометирована, потому что некоторые из ее частей зависят от пакета, который работал неправильно.
У вас может быть пакет, зависящий от другого пакета, который зависит от еще восьми. Вы понимаете, насколько это проблематично? Вы можете оказаться в ситуации, когда вы не знаете, почему один пакет не работает, когда другой, скрытый под четырьмя уровнями связи, может работать неправильно.
Если вы сможете сделать свои компоненты максимально независимыми, вам будет легче отлаживать их.
4. Добавляй возможность повторного использования
Это довольно просто и интуитивно понятно, но мы хотим быть уверены, что всякий раз, когда мы пишем код, мы думаем о том, как сделать этот код максимально многоразовым. Вместо того, чтобы писать конкретную функцию, которая хорошо выполняет одну задачу, но только работает в одной конкретной реализации, мы можем сделать ее более общей - немного более абстрактной. Таким образом, мы допускаем повторное использование в разных контекстах. Это основная идея возможности повторного использования.
Думайте об этом как о небольшой жертве, чтобы сэкономить время позже, вместо того, чтобы возвращаться, понимать этот код и переписывать его.