Правильный способ реализации классов DAO? - PullRequest
2 голосов
/ 11 января 2012

У меня есть несколько классов простых сущностей, соответствующих таблицам в базе данных, там структура похожа на:

package project.src.entities;
public class ClassName{
/** variables */
private type var1;
private type var2;
/** ...variable ends */
/** Default constructor */
public ClassName(){
}
/** Custom constructor */
public ClassName(type var1, type var2 /*, ... */){
this.var1 = var1;
..
}
/** follows getters and setters of all fields */
}

Теперь я создал новый пакет:

package project.src.dao;

Этот пакет будет содержать все методы, которые взаимодействуют с базой данных через JDBC.такие как:

public class ClassNameDAO {
  /** @return an object of ClassName of given id */
  public static ClassName getClassName(String id){
  . . .
  return className;
  }
  /** @return an ArrayList<ClassName> of objects of ClassName */
  public static ArrayList<ClassName> getAllClassName(){
  . . .
  return classNameList;
  }
  /* Similarly, methods add(ClassName className), update(id, newClassName) and delete(id) follows */
}

Теперь Мои вопросы:

  1. Это правильный способ реализации в Swing-приложении?
  2. Предложить Хороший способ реализацииDAOs, примеры приветствуются?
  3. Могу ли я иметь все методы static в DAO?Есть какие-либо проблемы?Если да, то почему?
  4. Что-нибудь еще, на что вы хотите обратить внимание?Спасибо.

РЕДАКТИРОВАТЬ: Нашли именно то, что мне нужно Здесь .... Спасибо @ BalusC

1 Ответ

1 голос
/ 11 января 2012

Это в основном правильно, за исключением того, что я не буду использовать статические методы в DAO.У меня также был бы интерфейс для DAO и класс DAO, который реализует интерфейс.

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

В будущем вы можете захотеть предоставить различные реализации для некоторых из ваших методов DAO.Например, вы можете захотеть иметь некоторый SQL, специфичный для конкретной реализации базы данных (например, Oracle Hint), или вы можете захотеть записать данные в файловую систему или в веб-сервис.Если вы используете один интерфейс DAO и многие классы DAO, которые его реализуют, вам будет проще использовать несколько реализаций в одном приложении.

...