ярлыки Java для Pojos? - PullRequest
       2

ярлыки Java для Pojos?

1 голос
/ 20 марта 2012

Мне интересно глупый вопрос, но хорошо, я люблю учиться:)

Скажите, что я получил следующий код:

public String method(<T> a)
{
String dataA = a.getB().getC().getD();
}

В какой момент становится интересно определить карту, которая кеширует наши запросы и содержит это:

Map<<T>, String> m;
m.put(a, dataA);

и, конечно же, [SNIP обычные тесты на недействительность и добавление объекта, если он отсутствует и т. Д. Плюс проблемы с обновлением] return m.get (a);

Позвольте мне подчеркнуть, что последовательные запросы НЕ являются дорогостоящими (никаких вещей, таких как вызовы БД или поиск JNDI).

Просто понятнее, если мы определим словарь, а не прочитаем всю строку слов «get».

Я считаю, что выполнение вызова get НЕ РАБОТАЕТ в процессоре. Опять же, я полагаю, что получение данных из хэш-карты НЕ является абсолютно бесплатным, но почти (по крайней мере, в моем случае это так :)).

Мой вопрос на самом деле касается удобочитаемости, а не производительности.

Спасибо!

Ответы [ 3 ]

4 голосов
/ 20 марта 2012

Чтобы повысить удобочитаемость (и уменьшить зависимости ), вы должны определить аксессор в A, например

public String getDataA() {
  return getB().getC().getD();
}

Тогда ваш код звонка становится

String dataA = a.getDataA();

Вы можете сказать, что вам потребуется слишком много таких быстрых методов в A, загромождающих его интерфейс. Это на самом деле признак проблемы дизайна класса. Либо A стал слишком большим и сложным (в этом случае может быть лучше разделить его на несколько классов), либо код, которому нужны все эти удаленные фрагменты данных, фактически принадлежит куда-то еще, скажем, B или C - скорее чем клиенту А.

0 голосов
/ 20 марта 2012

MVEL это еще один вариант:

String d = (String) MVEL.eval("b.?c.?d", a);

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

Кроме того, при использовании языка выражений, как указано выше, также существуют проблемы с безопасностью типов, поскольку нет проверки времени компиляции на фактическое выражение, чтобы убедиться, что a) оно имеет смысл, и b) возвращает правильный тип.

0 голосов
/ 20 марта 2012

Несколько вещей для рассмотрения:

Apache Beanutils имеет множество утилит для такого рода вещей: http://commons.apache.org/beanutils/

java.util.properties, если все значения являются строками

Если вы действительно хотите получить доступ к таким вещам, вы также можете использовать вместо этого groovy. Все поиски на картах в Groovy можно выполнить с помощью '.' нотации, а также поддерживает «безопасный» метод доступа, который будет проверять наличие нулей.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...