Предотвращение переноса зависимости

При кодировании я часто сталкиваюсь со следующим шаблоном:

- Вызовы метода другой (Прекрасный) метод, но метод, названный параметрами взятий, таким образом, в методе обертывания, я передаю в параметрах. Проблема, этот перенос зависимости может продолжиться и на. Как я мог избежать этого (какой-либо ценивший пример кода)?

Спасибо

5
задан GurdeepS 1 June 2010 в 21:25
поделиться

5 ответов

Шаг 1: Вместо того, чтобы передавать все как отдельные аргументы, сгруппируйте аргументы в класс, скажем X.

Шаг 2: Добавьте геттеры в класс X, чтобы получить соответствующую информацию. Вызываемый должен использовать геттеры для получения информации вместо того, чтобы полагаться на параметры.

Шаг 3: Создайте интерфейсный класс, наследуемый классом X. Поместите все геттеры в интерфейс (в C ++ это чисто виртуальные методы).

Шаг 4: Сделайте вызываемые методы зависимыми только от интерфейса.

2
ответ дан 14 December 2019 в 04:31
поделиться

Refactoring: Внедрение объекта параметра

У вас есть группа параметров, которые естественно идут вместе?

Замените их объектом.

http://www.refactoring.com/catalog/introduceParameterObject.html

Преимущество объекта параметров в том, что вызовы, передающие их, не должны меняться при добавлении/удалении параметров.

(учитывая контекст ваших ответов, я не думаю, что библиотека IoC или паттерны инъекции зависимостей - это то, что вам нужно)

1
ответ дан 14 December 2019 в 04:31
поделиться

Вы можете использовать инфраструктуру внедрения зависимостей. Одним из таких примеров является Guice: см. http://code.google.com/p/google-guice/

2
ответ дан 14 December 2019 в 04:31
поделиться

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

Сквозные проблемы (которые часто являются наиболее распространенной причиной для передачи параметров) лучше всего решать с помощью декораторов.

Если вы используете DI-контейнер с возможностями перехвата, вы можете воспользоваться ими для очень эффективной реализации декораторов (некоторые называют это возможностями AOP контейнера).

3
ответ дан 14 December 2019 в 04:31
поделиться

Поскольку они не могут быть (легко) протестированы по модулю, большинство разработчиков предпочитают внедрять объекты в представления. Поскольку представления (обычно) не используются для создания других представлений, на этом ваша цепочка DI заканчивается. У вас может быть проблема (с которой я сталкивался каждый раз в ahwile), когда вам нужно создавать объекты в правильном порядке, особенно при использовании инфраструктуры DI, такой как Unity, когда попытка разрешить объект приведет к взаимной блокировке. Главное, о чем вам нужно беспокоиться, - это круговая зависимость. Чтобы сделать это, прочтите следующую статью:

Может ли внедрение зависимостей предотвратить циклическую зависимость?

0
ответ дан 14 December 2019 в 04:31
поделиться
Другие вопросы по тегам:

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