2008-11-03 5 views
2

Сценарий:Методы удаления зависимостей?

события поднимается в классе А, который должен быть обработано с помощью метода класса В. (в настоящее время с помощью делегата)

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

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

ответ

5

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

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

-2

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

2

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

+0

Всегда кодируйте интерфейс, в зависимости от интерфейса, а не от фактической реализации, улучшает общую гибкость и проверяемость. – Tigraine 2008-11-03 15:16:53

0

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

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

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

Если C осложнил свои методы, это хорошая ставка, что они на самом деле принадлежат на класс А.

0

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