Код необходимо разбить на компоненты, минимальная единица переиспользования - это класс.
Любое переиспользование влечет за собой более высокую связанность (coupling, есть еще вариант зацепление). Если компонент уже сильно связан с другими, то это значительно ограничивает возможности по его переиспользованию. В общем и целом, чем выше связанность компонентов, тем сложнее поддерживать приложение.
@important-links:Важные ссылки
Критерии качества архитектуры ПО - критерии качества архитектуры ПО.
Архитектура ПО - Stable Dependencies Principle - принцип устойчивости зависимостей, очень важен для определения возможности переиспользования классов (компонентов). На основании оценки устойчивости можно принимать решения о том, насколько безопасно зависеть от такого класса.
Архитектура ПО - Stable Abstractions Principle - принцип устойчивых абстракций, говорит о том, что абстрактность компонента или класса должна быть пропорциональна его устойчивости. То есть, максимально абстрактные компоненты должны быть максимально устойчивыми, и наоборот. Соответственно, все остальные компоненты в пространстве “абстрактность-устойчивость” должны лежать недалеко от прямой, соединяющей эти два экстремума.
@practical-reuse:Как использовать это знание
Для использования этих принципов необходимо ответить на следующие вопросы:
- Что является “единицей кода” в вашем окружении? Каков минимальный уровень декомпозиции, позволяющий переиспользовать код? Для Java такими единицами являются классы и интерфейсы (и с некоторой натяжкой, публичные статичные методы, которых нужно избегать).
- Как единицы кода могут зависеть друг от друга? В Java это ссылочная зависимость (знание о существовании других классов) и отношения наследования.
- Как можно абстрагироваться от низкоуровневых деталей? В Java это можно сделать с помощью интерфейсов и абстрактных классов.
Зная ответы на эти вопросы, нужно следовать принципу устойчивых абстракций и избегать создания компонентов, которые были бы устойчивыми и очень конкретными, т.к. их изменение или переиспользование - это боль.
Если предполагается активное переиспользование какого-либо компонента, то нужно
очистить его от низкоуровневых деталей и свести его зависимости к минимуму (т.е.
превратить его в чистую абстракцию). Этого можно добиться путем создания
абстрактных методов и ссылок только на интерфейсы. Также помогает снижение числа
инструкций import
и им подобных.
С другой стороны, если класс зависит от многих других, то его нельзя делать устойчивым, другими словами, нельзя переиспользовать.
Основной источник: Mental Maintainability Model