Методы удаления зависимостей? - PullRequest
2 голосов
/ 03 ноября 2008

Сценарий:

Событие возникает в классе A, который должен обрабатываться методом в классе B. (в настоящее время через делегата)

Данные, передаваемые из события в метод , в настоящее время переносятся в класс C.
Это, очевидно, требует, чтобы класс B зависел от класса C.

Есть ли какие-либо методы / рефакторинг, которые я могу выполнить, чтобы удалить эту зависимость?
например. развернуть данные обратно в простые примитивные типы данных и передать их напрямую.

Ответы [ 5 ]

5 голосов
/ 03 ноября 2008

развертывание примитивов будет работать, но будьте уверены, что вы действительно хотите удалить эту зависимость. Совершенно верно, что классы A и B оба зависят от C, если C является мостом между ними, или если C подпитывает их обоих и т. Д.

развертывание примитивов удаляет зависимость компиляции, но не зависимость данных, и может фактически "денормализовать" дизайн, удаляя объект (класс C), который логически требуется

2 голосов
/ 03 ноября 2008

Я согласен со Стивеном Лоу; Зависимость, вероятно, действительна. Единственная альтернатива, которую я могу предложить, это зависеть от интерфейса, а не от фактического класса, но это в значительной степени сводится к тому же.

0 голосов
/ 03 ноября 2008

Вы рассматривали структуры внедрения зависимостей как Structuremap , чтобы хотя бы централизовать эти зависимости и сделать их настраиваемыми? Я не пробовал это с типами событий / делегатов, но это отличный инструмент, если вы передаете много пользовательских типов / интерфейсов вокруг ваших слоев.

0 голосов
/ 03 ноября 2008

Как и большинство других, зависимость от C, вероятно, действительна.

Однако, если в зависимости от C возникают проблемы, это может быть связано с тем, что C слишком сложен или имеет слишком много зависимостей.

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

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

0 голосов
/ 03 ноября 2008

Вы можете сериализовать в XML, а затем читать XML напрямую через XPATH (без десериализации)

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