Письмо 06 - Архитектура сложной системы
Независимость объектов

Реальный мир состоит из множества элементарных сущностей, которые никак не связаны между собой и существуют обособленно. Буквы алфавита и ноты никак не взаимодействуют между собой, точно так же как и атомы в таблице Менделеева или структурные группы Ассура. Любая сложная система разложима на элементарные составляющие. Элементарных составляющих, как правило, очень и очень немного, но они образуют бесчисленное количество комбинаций, обладающих теми или иными свойствами. Так, например, два-три десятка букв образуют сотни тысяч слов, а семь нот - бесконечное количество музыкальных произведений, чуть больше сотни атомов создают огромное количество молекул. Но точно также ограниченное количество типов данных, поддерживаемых современными реляционными СУБД, лежит в основе хранения самой различной информации.

Можно рассмотреть ситуацию, когда, руководствуясь благими побуждениями, мы заложили связь между двумя элементарными объектами внутрь самих объектов, например, в виде обращения к одному объекту из метода другого объекта. Но наличие этой связи означает, что теперь нельзя использовать один объект без другого. Это равнозначно тому, что мы связали две буквы, например, «А» и «Б», но тогда мы не сможем использовать букву «А» без буквы «Б», это приведет к сокращению возможных применений, к сложностям при образовании слов. Понятно, что чем больше таких связей и зависимостей, тем труднее язык и тем сложнее им пользоваться. Если продолжать устанавливать прямые связи, то сложность будет возрастать многократно, а возможность повторного использования объектов в иных сочетаниях столь же сильно сократится.

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

Сайт Alexus Software Development