Каков правильный дизайн для двух объектов, которые имеют зависимость от другого объекта? - PullRequest
0 голосов
/ 04 мая 2011

Я немного боролся с проблемой дизайна. У меня есть объект Foo с массивом объектов Bar. Существует ряд методов расчета, которые полностью связаны с Foo и зависят от полного знания массива Bar. Так что я должен:

  • создать класс Calculator и передать массив объектов Bar. Мне это кажется плохим, потому что я не могу протестировать Калькулятор как отдельную единицу, поскольку Foo и Калькулятор зависят от одного и того же массива Bar.

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

  • просто держите калькулятор в Foo, так как он так привязан к нему.

1 Ответ

2 голосов
/ 04 мая 2011

Ваша архитектура должна зависеть не от класса объекта, а от интерфейсов.

Экземпляр Foo должен в конструкторе требовать параметр, который реализует интерфейс iCalculator. И ваш метод addBar должен только требовать, чтобы вы передавали ему что-то, что реализует интерфейс iBar. И объект Calculator (который был передан Foo) должен иметь возможность выполнять метод calculate для любого экземпляра iBar объекта.

Теперь вы можете протестировать все три объекта изолированно, если вы предоставите Mocks с одинаковыми интерфейсами.

На самом деле «решение» - это просто применение принципа обращения зависимостей , который является одним из принципов SOLID /

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