Архитектурный дизайн, чтобы избежать круговой зависимости
У меня есть адаптер с находит источники и возвращает его. Но мне нужно сохранить ссылку на адаптер со всеми его источниками. Но этот дизайн создаст круговую зависимость.
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.