Круговое решение для зависимости

Наш текущий проект имеет, столкнулся с круговой проблемой зависимости. Наш блок бизнес-логики использует классы и статические методы от нашего блока SharedLibrary. SharedLibrary содержит целый набор функций помощника, таких как Класс чтения SQL, Перечислители, Глобальные переменные, Обработка ошибок, Вход и Проверка.

SharedLibrary нужен доступ к Бизнес-объектам, но для Бизнес-объектов нужен доступ к SharedLibrary. Старые разработчики решили этот очевидный запах кода путем тиражирования функциональности бизнес-объектов в общей библиотеке (очень анти-DRY). Я провел день, теперь пытаясь читать о моих опциях решить это, но я поражаю тупик.

Я открыт для идеи модернизации архитектуры, но только как последнее прибежище. Таким образом, как у меня может быть Общая Библиотека Помощника, которая может получить доступ к бизнес-объектам с бизнес-объектами, все еще получающими доступ к Общей Библиотеке Помощника?

13
задан gfoley 7 April 2010 в 22:54
поделиться

3 ответа

Вы можете создать отдельный проект только для объектов значений (без логики) и интерфейсов .

Ваши классы разделяемой библиотеки реализуют интерфейсы , а бизнес-библиотека зависит от интерфейсов (слышу ли я здесь более тестируемый и несвязанный код? Не говоря уже о том, что вы удалили зависимость из общей библиотеки).

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

У вас будут оба проекта, не зависящие друг от друга, а только в другом проекте только с «фиктивными» объектами (без логики):

Бизнес ---> Интерфейсы и объекты значений <--- Общая библиотека

Теперь они разъединены =)

21
ответ дан 1 December 2019 в 21:37
поделиться

Каждый раз, когда у вас есть «общая» библиотека, вы ни в коем случае не должны ссылаться на свой проект бизнес-объекта. Это приведет к возникновению этой проблемы, как вы, очевидно, видите.

Чтобы решить эту проблему, удалите весь код, зависящий от бизнес-объекта, из общей библиотеки и либо измените архитектуру этого вспомогательного кода, либо поместите этот вспомогательный код в сам проект бизнес-объекта.

3
ответ дан 1 December 2019 в 21:37
поделиться

Одно из решений - поместить между ними узор фасада. Здесь вы избежите прямого доступа / зависимости от ваших бизнес-объектов из общей библиотеки. Вместо этого вы должны использовать слой, который действует как фасад между вашей библиотекой и BO. Таким образом, вы можете упаковать свои общие библиотеки чистыми и разделенными.

1
ответ дан 1 December 2019 в 21:37
поделиться
Другие вопросы по тегам:

Похожие вопросы: