У меня есть небольшое веб-приложение, которое я создаю. Прежде всего, чтобы улучшить свои возможности модульного тестирования (а также еще больше разделить мой код), я реализую шаблон локатора сервисов для поиска конкретных реализаций некоторых зависимостей. Я в основном доволен самим классом синглтона Service Locator, но мне любопытно, куда его поместить и как загрузить. Синглтон по существу управляет хэш-картой интерфейса -> конкретные реализации.
У меня есть несколько проектов в моей рабочей области:
1) Проект уровня представления, который содержит код сервлета и обработку уровня представления. (использует 2 и 3 ниже)
2) Проект уровня доступа к данным, который содержит код для доступа к базам данных и т. д. (использует 3 ниже)
3) Общий проект, содержащий различные модели данных, используемые обоими слоями. (нет других ссылок на проект)
Поскольку локатор сервисов предназначен для обслуживания реализаций классов в проектах 1 и 2 выше, мне интересно, где его лучше всего разместить?
Другой вопрос, на котором я застрял, заключается в том, как лучше загрузить его с реализациями по умолчанию. Один из вариантов — поместить все реализации по умолчанию в конструктор класса одноэлементного локатора службы. Например.:
private ServiceLocator() {
services.put(ISomeClass.class, new SomeClass());
....
}
Другой вариант — создать отдельный класс, который отвечает за загрузку ServiceLocator с реализациями по умолчанию. Но тогда возникает вопрос, как вызвать его, чтобы реализации по умолчанию загружались перед любым другим классом.
Итак, я думаю, что у меня два вопроса:
1) В каком проекте лучше всего подходит ServiceLocator?
2) Какие решения вы рекомендуете для загрузки класса с реализациями по умолчанию?
Благодарность