Это будет сложный вопрос для описания, но здесь идет.
Мы используем Delphi Spring Framework. (http://code.google.com/p/delphi-spring-framework/)
Допустим, у меня есть UnitA, который объявляет InterfaceA, который реализован ClassA.
Точно так же у меня есть UnitB, который объявляет InterfaceB, который реализован ClassB.
Оба зарегистрировали свой интерфейс и свой класс в контейнере Spring в соответствующих разделах инициализации.
InterfaceA зависит от InterfaceB, но поскольку мы используем Spring, UnitA не имеет UnitB в своем предложении uses
. Другими словами, мы выполнили свою работу - мы разделили UnitA и UnitB, но мы все еще можем иметь InterfaceA зависимым от InterfaceB.
Однако, учитывая приведенный выше сценарий, мы должны убедиться, что и UnitA, и UnitB включены в проект, чтобы можно было разрешить зависимости.
Теперь представьте, что мы начинаем новый проект. Этот новый проект использует UnitA, но разработчик не понимает, что если нужно использовать UnitA, нужно также включить UnitB в проект. Не будет ошибки компилятора, поскольку зависимость разрешается во время выполнения, а не во время компиляции.
И в этом заключается вопрос: как правильно убедиться, что эта зависимость от UnitB известна до того, как приложение будет развернуто?
Мы можем предвидеть ситуацию в сложном приложении, когда, несмотря на тщательное тестирование, данный путь к коду не выполняется, возможно, в течение длительного времени, и эта отсутствующая зависимость не обнаруживается до развертывания.
Мы внедрили систему, в которой каждый вызов разрешения интерфейса сопровождается вызовом Requires
, который проверяет и вызывает исключение при запуске, гарантируя, что мы увидим ошибку. Но нам интересно, есть ли «лучшая практика» или стандартный способ обнаружить это или иным образом решить эту проблему.
Добавлено: Это проблема в Java и других языках?