Skip to content

Latest commit

 

History

History
78 lines (56 loc) · 6.03 KB

File metadata and controls

78 lines (56 loc) · 6.03 KB

Общие принципы и требования к коду

DRY, SOLID, KISS, YAGNI

В нашей работе мы стараемся следовать приведенным выше принципам.

Управление сложностью

Управление сложностью должно являться главным техническим императивом каждого разработчика. Если посмотреть в общем, то все ключевые технологии (к примеру ООП), лучшие практики (те же SOLID, KISS, DRY), различные архитектурные шаблоны(MVC, CleanArchitecture) создавались в том числе для того, чтобы уменьшать сложность кода, и все это из-за способностей человеческого разума. Как бы мы нам не было неприятно это осознавать, но человек ограничен и не может понимать как работают системы любой сложности.

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

С. Макконнелл “Совершенный код” Управление сложностью глава 5.2

Принцип единой ответственности (S in SOLID)

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

подробнее

Уровни абстракции

Примечание. Этот раздел о выделении абстракции на низком уровне в рамках одного класса.

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

Пример

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

Хотя в этом разделе раскрыта тема о выделении абстракци на низком уровне в рамках одного класса эти принципы следует применять и для всех уровней: jar(aar) библиотека - пакет - подпакеты - класс - и тд.

При обсуждении уровней абстракции следует также вспомнить принцип инверсии зависимостей(D in SOLID) - модули верхних уровней не должны зависеть от модулей нижних уровней.

Code-style студии

При разработке требуется соблюдать определеный стиль написания кода. Это помогает легче ориентироваться и понимать чужой код.

Мы используем следующие: