> -- Илья Ермаков писал(а):
> Если использования внешней подсистемы избежать нельзя, то пусть про неё хотя бы знает как можно меньшая часть нашей. В идеале - какой-нибудь один специальный маленький модуль. Опишем в модуле SomeService абстрактные интерфейсы к той службе, при этом предельно компактные - включающие в себя доступ ровно к тому функционалу, какой будет нужен сейчас и в ближайшем будущем нашей подсистеме. И сделаем модуль "реализации" SomeService-Based-On-External-Component-X, который позволяет использовать внешний компонент через эти абстрактные разъёмы.
Года два-три назад на обероновский форум "Королевства..." приходил Александр Сергеевич Усов (ASU). Его тогда, можно сказать, что от туда изжили, но он именно о такой архитектуре и пытался рассказать. Он такую архитектуру придумал изучая восточную философию про "Инь и Янь". Внутри Инь есть Янь, а внутри Янь есть Инь. То есть подсистемы (в его системе) друг друга непосредственно не видят, но взаимодействуют друг с другом самым непосредственным образом потому, что внутри каждой из подсистем есть некое отображение/представление/отражение (вот эти самые абстрактные интерфейсы) другой подситемы. По его словам, трудоёмкость разработки его системы управления предприятием оказалась в тысячи раз меньше трудоёмкости разработки зарубежных аналогов (его система ~ несколько человеко-лет, зарубежные аналоги ~ несколько тысячь человеко-лет).