Дизайн плагина, имеющий проблемы с круговой зависимостью - PullRequest
1 голос
/ 13 января 2010

У меня есть приложение ecomm в Проекте № 1.

У меня есть реализация шлюза платежей в проекте № 2, который ссылается на проект № 1. Он ссылается на интерфейсы, так что шлюз реализуется по контракту.

Теперь мне нужно использовать реализацию из Проекта № 2 в Проекте № 1.

Существует круговая зависимость, поэтому она не работает как есть.

Что мне делать? Должен ли я разбить интерфейсы на собственный проект? Это кажется самым простым подходом.

Дело в том, что если мне нужно создать еще одну реализацию шлюза, его легко можно включить в Проект № 1.

Ответы [ 4 ]

1 голос
/ 13 января 2010

Размещение интерфейсов в отдельной библиотеке часто является хорошей идеей. Это также гарантирует, что вы можете изменять и развертывать конкретные реализации независимо друг от друга.

Как общее практическое правило, когда я проектирую, я начинаю с объединения интерфейсов с их потребителями, а затем перемещаю их в отдельную библиотеку, если возникает такая необходимость.

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

Если вы обнаружите, что эти интерфейсы достаточно не связаны , вы можете даже подумать о том, чтобы поместить их в две разные библиотеки .

0 голосов
/ 14 февраля 2010

Это обман вашего второго вопроса, но, по крайней мере, в нем есть больше деталей.

Если Проект 2 является плагином для Проекта 1, то Проект 1 не должен зависеть от Проекта 2 ни при каких обстоятельствах. Период.

Загрузка сборки проекта 2 в проект 1 с помощью отражения / MEF / и т. Д.

0 голосов
/ 13 января 2010

Да, разбейте ваши интерфейсы на другой проект и сделайте ссылку на этот проект из обоих.Таким образом, оба зависят от абстракции.

0 голосов
/ 13 января 2010

Да. Вы должны поместить интерфейсы, которые должны реализовывать плагины (вместе с любым потенциальным общим вспомогательным кодом) в отдельную сборку.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...