2013-03-20 3 views
3

У меня есть веб-приложение Java, разработанное как трехуровневая архитектура. В настоящее время у меня есть два разных уровня базы данных. Весь мой код данных Acces Layer сконцентрирован в пакете. Желаемый уровень данных определяется в файле конфигурации. Поэтому другой пакет необходимо импортировать в зависимости от файла конфигурации. Оба datalayers взаимодействуют с бизнес-слоем через объект DBfacade. Можно ли решить, какой пакет необходимо импортировать, или я должен переименовать свои DBfacades, поэтому у меня есть 2 разных имени и импортировать оба пакета?Импорт пакета Java в зависимости от конфигурации

+5

Там нет условных импорта пакетов в Java. Основываясь на описании проблемы, я бы порекомендовал вам начать чтение на Inversion of Control (IOC). – Perception

ответ

0

Зависит ли слой данных от окружающей среды? Если да, просмотрите источники данных с JNDI. Это позволит среде инкапсулировать детали низкого уровня.

См. Why use JNDI for data sources.

2

Вы используете очень плохой дизайн, если вы делаете 2 класса с одинаковыми именами и одинаковыми сигнатурами методов в отдельных пакетах, и вы переключаетесь между этими реализациями, изменяя импорт. Очень плохой дизайн.

Обратите внимание, что раздел импорта существует ТОЛЬКО до компиляции. Затем у вас есть полностью квалифицированные ссылки на байт-код.

Используйте интерфейсы и реализации, swich между реализациями с использованием IoC или отражения. Или импортируйте обе реализации и решите, какой из них вызывать через if, но IoC дает вам больше гибкости (например, возможность добавления новой реализации без изменения кода).

1

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

Однако вы можете использовать разные библиотеки в зависимости от вашей конфигурации. Например, если у вас есть 2 различных реализаций интерфейса Foo: FooOne и FooTwo расположенные в разных jar файлов вы можете реализовать завод FooFactory, который загружает одну из реализаций, принимающих конфигурацию из файла, например:

public class FooFactory { 
    public Foo createFoo() throws Exception{ 
     Properties props = new Properties(); 
     props.load("/var/config.properties"); 
     return Class.forName(props.getProperty("foo.class")).newInstance(); 
    } 
} 
Смежные вопросы