2013-03-19 1 views
-1

Я создаю приложение, имеющее уровень бизнес-логики, которому необходимо получить доступ к уровню DAO для всех связанных с БД. Мое требование таково, что класс DAOImpl может продолжать меняться, поэтому я ищу способы, с помощью которых я могу получить дескриптор класса DAOImpl в своем классе бизнес-логики без необходимости знать фактический класс DAOImpl. Есть ли способ достичь этого на Java?java скрывает реализацию данных класса между двумя слоями

+0

Просто, чтобы добавить к этому вопросу, в любой данный момент времени, там будет только один класс DAOImpl, который будет использоваться. – user2185805

ответ

3

DAOImpl класс должен реализовать интерфейс DAOLayer (скажем). Класс businessLogic должен состоять из объекта DAOLayer.

class BusinessLogic 
{ 
    /// ... 

    DAOLayer daoLayer; 

    public BusinessLogic(DAOLayer daoLayer) 
    { 
     this.daoLayer = daoLayer; 
    } 

    /// ... 
} 

class DAOImpl implements DAOLayer 
{ 
    /// ... 
} 

Вы должны пройти фактическую реализацию DAOLayer при создании BusinessLogic объекта класса.

Аналогично следующее:

DAOLayer aDaoLayer = new DAOImpl(); 
BusinessLogic bl = new BusinessLogic(aDaoLayer); 

ИЛИ

public BusinessLogic() 
    { 
     this.daoLayer = DAOFactory.create(true); 
    } 

class DAOFactory 
{ 
    public static DAOLayer create(bool isDB) 
    { 
     DAOLayer aDao; 

     if(isDB) 
     { 
      aDao = // create for DB 
     } 
     else 
     { 
      aDao = // create for file 
     } 

     return aDao; 
    } 
} 
+0

Я получил это, но как конструктор BusinessLogic получит дескриптор объекта DAOImpl. Мне нужно было бы добавить что-то вроде: this.daoLayer = new DAOImpl(); Это будет иметь особое значение для текущей реализации DAOImpl. – user2185805

+0

см. Правки. Внутри 'BusinessLogic' объекты DAO не должны создаваться. ИЛИ вы также можете использовать заводской шаблон. – Azodious

0

звук, как будто вы хотите использовать interface, это базовый метод развязки java от желаемого поведения.

1

Ваша логика логистики должна определенно обрабатывать только DAO interfaces, что скроет фактическое перемещение.

Чтобы иметь возможность быстро изменить реализующие классы, посмотрите на контейнеры IoC, такие как Spring

Смежные вопросы