Использование констант вместо строк

advertisement
КОД
1. Использование констант вместо вместо захардкоданых значений. Если
константа используется по всему приложению, то ее определяют в
отдельном классе (например: com.epam.resources.Constants). Если же
данная строка используется только в данном классе то ее можно
определить здесь же. Константы содержат только символы верхнего
регистра.
public static final String CONSTSTRING1 =“PARAMETER1”;
2. Структура пакетов должна быть согласно направления приложения и
фирмы-разработчика. Первый пакет либо com либо код страны ru, by, es, fr,
en … дальше пакет с названием фирмы разработчика epam, sun, carefirst …
потом может идти разделение по бизнес направлению insuarance, auto,
finance… пакет с названием приложения client, broker… и внутри уже
приложение разбивается на пакеты database, resources, utils, model и т.д.
Названия пакетов содержат только символы нижнего регистра.
3. Названия переменных, методов, классов, HTML страниц, JSP должны точно
указывать на предназначение данной сущности что облегчит в будущем
поддержку данного приложения. Избегать использования сокращений и
аббревиатур типа aaa, bbb, getCr…
4. Любой повторяющийся код классов и JSP должен быть вынесен в
отдельные вспомогательные методы, классы, страницы, для избежания
эффекта copy & paste, после чего затруднена поддержка общей
функциональности.
5. Стили и Javascript код должны быть вынесены в отдельные файлы css, js ,
которые кэшируются браузером, тем самым уменьшая объем
передаваемой страницы и повышая возможность поддержки кода в
дальнейшем.
6. Проверка на пустую строку должна осуществляться с помощью функции
str.length() = = 0 а не str.equals(“”). Для избавления от лишней проверки на
null в случаях
if(str != null && str.equals(“test”)){
…
}
Переменную поменять местами с константой:
if(“test”.equals(str)){
…
}
7. Использовать конструкции if … else в случаях использования многократных
проверок типа:
if(VALUE.equals(name)){
…
}else
if(VALUE1.equals(name)){
…
}else
if(VALUE2(name)){
…
}
8. Одиночные операнды также должны быть заключены в фигурные скобки
if(n == 0){
a++;
}
9. Код типа:
String path1 =
getServlet().getServletConfig().getServletContext().getRealPath(“
1.txt”);
String path2 =
getServlet().getServletConfig().getServletContext().getRealPath(“
2.txt”);
int version =
getServlet().getServletConfig().getServletContext().getMinorVersi
on();
должен быть переработан в вид:
ServletContext servletContext = getServlet()
.getServletConfig().getServletContext();
String path1 = servletContext.getRealPath(“1.txt”);
String path2 = servletContext.getRealPath(“2.txt”);
int version = servletContext.getMinorVersion();
Причем значения которые не изменяются во время работы приложения
такие как например realPath должны вычисляться один раз и вынесены в
статические переменные.
10. Не использовать вызов многих методов в одной строке, что затрудняет
нахождение проблемы.
11. При складывании строк в цикле использовать StringBuffer вместо String
String s = "";
for (int i = 0; i < count; i++) {
s += array[i];
}
return s;
Использовать
StringBuffer sb = new StringBuffer(estimatedCount);
for (int i = 0; i < count; i++) {
sb.append(array[i]);
}
return sb.toString();
12. При использовании JDBC Connections, Statements должны быть закрыты:
Connection con = null;
PreparedStatement preparedstatement = null;
Resultset resultset = null;
try {
con = db.getConnection(true);
preparedstatement = con.prepareStatement("SELECT xxx
resultset = preparedstatement.executeQuery();
…
}
catch (Exception e)
{
// Do error handing here
}
finally {
if (resultset != null)
try {
resultset.close();
} catch (SQLException e) {}
if (preparedstatement != null)
try {
preparedstatement.close();
} catch (SQLException e) {}
if (con != null){
db.releaseConnection(con);
}
}
WHERE ID = ?");
13. Все места в коде, которые требуют разъяснений, должны иметь комментарии.
14. Старый код должен быть удален.
15. Проверки значений web приложения, которые не требуют серверной
обработки, должны осуществляться на клиентской стороне посредством
JavaScript. Сообщения об ошибках должны точно указывать на проблему и
формат вводимых данных на той же самой странице редактирования.
Confirmation также должен содержать недвусмысленный текст так например
вопрос Are you sure? не содержит основания вопроса.
16. Страницы редактирования данных должны содержать кнопки Cancel в то время
как простой просмотр информации для возвращения на предыдущую страницу
должен содержать кнопки Back. Back должен обрабатываться на серверной
стороне избегая использование history.back.
XML

Названия элементов XML не должны содержать данные самого XML.

Избегать ненужных вложенностей.
<shop>
<products>
<product>…</product>
…
<product>…</product>
</products>
</shop>
XSD

Правила для элементов, атрибутов XML должны задаваться как можно точнее,
избегая тем самым возможности на ошибку пользователя.

Стараться описывать типы отдельно избегая большой вложенности XSD
элементов.
Парсеры

Для SAX парсеров использовать общий подход через использование
XMLReader.
XSL

Использовать класс Templates вместо Transformer для одноразовой загрузки
XSL, тем самым увеличивая производительность приложения.
Struts

Вместо Action использовать DispatchAction и другие варианты класса Action.

Избегать использование глобальных переменных в классах Action.

Группировать функциональность для сущности в одном классе Action и
ActioForm.
Логирование

Использовать не System.out.println а либо log4j либо commons библиотеку.
Для вывода информации с использованием конкатенаций строк и вызовов
методов использовать проверку на включенность уровня логирования.
if (log.isDebugEnabled()) {
log.debug("generating message for " +
trap.getAlertMail());
}
Download