Архитектурный дизайн, чтобы избежать круговой зависимости

У меня есть адаптер с находит источники и возвращает его. Но мне нужно сохранить ссылку на адаптер со всеми его источниками. Но этот дизайн создаст круговую зависимость.

IAdaptor нужна функция, которая возвращает список ISource, и каждый ISource должен хранить ссылку на свой собственный адаптер.

ISource хранится в проекте 1 и IAdaptor в проекте 2

Как мне это сделать, не создавая круговой зависимости друг с другом?

1 ответ

Я бы порекомендовал вам взглянуть на то, какие функциональные возможности действительно нужны ISource от IAdaptor: какие методы в IAdaptor вызываются из реализации ISource, и действительно ли эти методы связаны с IAdaptor.

В некоторых ситуациях может быть целесообразно переместить эти функции из IAdaptor в качестве отдельного и более общего интерфейса (я назову его ISourceDependency) и поместить его в ту же сборку ISource. ISource будет зависеть от ISourceDependency вместо IAdaptor, и, таким образом, круговая зависимость удаляется. Тогда вам просто нужно позволить адаптерам реализовать ISourceDependency в дополнение к IAdaptor.

Если вы обнаружите, что методы ISourceDependency действительно связаны с логикой IAdapter, то было бы лучше просто поместить IAdapter в ту же сборку, что и ISource.

Другие вопросы по тегам