Spring beans, вдогонку, или чем думают разработчики
Для начала проясню для несведущих что такое бин а то уже много вопросов задаётся.
Для хранения структурированной информации, не заморачиваясь с индексами массивов, можно использовать два основных варианта: массив хешей и массив бинов. Что такое хеш, думаю понятно
$USER['id']=666;
$USER['name'] = 'Василий';
$USER['lastname'] = 'Пупкинд';
Что такое бин:
User {
private Integer id;
private String name;
private String lastname;
public Integer getId();
public String getName();
public String getLastname();
public void setId(Integer id);
public void setName(String name);
public void setLastname(String lastname);
}
плюсы бина очевидны, самых очевидных как минимум два:
1) программа не выполняет поиск по строке, ей достаточно иметь pointer на getter значения (getter - процедура значение возвращающая)
2) при изменении структуры хранимых данных, мы просто переписываем getter и setter, не меняя в программе ничего более.
Теперь пример.
В Spring есть отличная штука Form Objects. Когда вызывается вебовский POST-метод, мы имеем не абстрактный набор переменных а уже готовый объект (напр. как в примере выше, User), аналогичный объект мы имеем в базе.
представим ситуацию:
- в базе есть полный объект User, с заполненными полями id, name, lastname.
- через форму мы получили так же объект User но с заполненными полями name (мы редактировали имя) и id (собственно кого).
после авторизаций, проверок может ли юзер писать в данный объект и прочей ерунды, у нас стоит совершенно понятная задача:
1) подгрузить объект userFromDB из базы по id = userFromForm.getId()
2) скопировать все поля, которые пришли по форме в объект userFromDB
3) записать объект userFromDB в базу откуда он пришел
пункты 1 и 3. совершенно элементарно выполняются. это всем понятно.
пункт 2....
в данном пункте мы естественно должны скопировать все not null (не пустые) поля одного объекта в поля другого. на рынке существует куча библиотек копирования бинов, включая BeanUtils от Spring и библиотеку с аналогичным названием от Apache.
Вы думаете хоть в одной библиотеке есть функция копирования всех not null полей? хахаха. Мозх разработчиков до такой елементарщины не додумался. Предлагаются варианты индивидуальных копирований с XML-конфигами, интерфейсами и прочей лабуденью. А функция-то простая как двери.
public class AlterBeans {
public static void copy(Object s, Object d, boolean ignoreNull, boolean ignoreMissing) throws
InvocationTargetException, NoSuchMethodException, IllegalAccessException {
Method[] methods = s.getClass().getMethods();
for (Method method : methods) {
String getter = method.getName();
Pages: 1 2
- Март 17th
глубоко