Какой из них является эффективным решением для следующей проблемы? - PullRequest
2 голосов
/ 21 марта 2011

У меня есть проект Struts и Hibernate,

  1. Из класса действий мне нужно вызвать DAO, чтобы получить данные из базы данных.

  2. Мне нужно, чтобы все поля в классе формы были переданы методу в DAO.

Форма имеет около 15 полей, все имеют тип String.

Что лучше или эффективнее: передать поля непосредственно в DAO или весь объект FORMкак параметр?

Ответы [ 2 ]

2 голосов
/ 21 марта 2011

Представьте себе метод с 15 строковыми параметрами:

public void save(String name, String firstName, String email, String ..., String ..., String ..., String ..., String ..., String ..., String ..., String ..., String ..., String ..., String ..., String ...)

О, смотри, горизонтальная полоса прокрутки. И довольно маленькая кнопка. Гектометр Это выглядит сомнительно. Не делай этого.

Всегда лучше собирать параметры в объекте параметров, если у вас их более 3 или 4. Длинные списки параметров создают следующие проблемы:

  1. Вы не можете опустить любой параметр. Поэтому, если вам не нужен ни один из них, вам придется пропустить много null с или что-то еще.

  2. Порядок параметров фиксирован. Если вам нужно изменить его или добавить параметры, у вас всегда проблемы. Если вы допустили ошибку (и вы это сделаете), то нет простого способа узнать где.

    Если вы используете объект параметра с установщиками и получателями, вы можете заполнить значения в любом порядке.

  3. Параметры не имеют названия. Пример: * +1021 *

    method("23894623");
    

    что это значит? Смотрите здесь:

    Params params = new Params();
    params.setPhoneNumber("23894623");
    method(params);
    

    О, это номер телефона. Теперь это очевидно.

0 голосов
/ 21 марта 2011

Передача 15 параметров в метод или в структуру данных на основе коллекции подвержена ошибкам и сложна в обслуживании.

Вы можете просто передать ваше pojo (Form bean) в метод Dao, который будет создавать запрос.В качестве бонуса Hibernate предлагает Запрос гибернации по примеру API , который может подойти вам 100% для этой проблемы.

...