|
|
|
рефакторинг
|
|||
|---|---|---|---|
|
#18+
Доброго времени суток.. Имеется некий проект предназначенный для более глубокого понимания программирования под web и личного пользования. В нем есть некий сервлет и jsp`шка. Сразу скажу это не тестовое задание куда-то, а все для себя любимого. Я начал читать книгу Роберта Мартина "Чистый код", и мои подозрения что мой код является говнокодом переросли в уверенность, что мой код даже хуже, чем я думал. И вот я сейчас в сомнениях, пробовать писать все заново, или же рефакторить существующий код по мере чтения сенсея, Мартина, и снова и снова.. Скорее всего склонюсь к рефакторингу существующего, так как основная задача на этот кусок была познать основы hibernate, а начав переписывать хочу сделать это на Spring. Но перед спрингом хочу опять таки прописать все ручками. что бы не стать ботом пишущем на 2 фреймоворках хэлло ворды, и не понимающим сути происходящих процессов.. Впрочем не буду утомлять фантазиями очередного недоджуна, а ближе к делу.. Ближе к делу, подскажите как лучше отрефакторить код, в чем проблемы, в коде, в выборе технологий, что и как было бы более красиво и подходяще.. Сам результат, вот ссылка на картинку , меня полностью устраивает, а вот код не очень.. Собственно сам код: servlet Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. JSP Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68. 69. 70. 71. 72. 73. 74. 75. 76. 77. 78. 79. 80. 81. 82. 83. 84. 85. 86. 87. 88. 89. 90. 91. 92. 93. 94. 95. 96. 97. 98. 99. 100. 101. 102. 103. 104. 105. 106. 107. 108. 109. 110. 111. 112. 113. 114. 115. 116. 117. 118. 119. 120. 121. 122. 123. 124. 125. 126. 127. 128. 129. 130. 131. 132. 133. 134. 135. 136. 137. 138. 139. 140. 141. 142. 143. 144. 145. 146. 147. 148. 149. 150. 151. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.10.2016, 21:22 |
|
||
|
рефакторинг
|
|||
|---|---|---|---|
|
#18+
liberum, какой ide пользуешься.? инклуд лучше делать фалы jspf ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.10.2016, 21:32 |
|
||
|
рефакторинг
|
|||
|---|---|---|---|
|
#18+
liberum, для даты лучше использовать фишки даты java8 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.10.2016, 21:34 |
|
||
|
рефакторинг
|
|||
|---|---|---|---|
|
#18+
liberum, стили задавать в файлах css ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.10.2016, 21:36 |
|
||
|
рефакторинг
|
|||
|---|---|---|---|
|
#18+
liberum, обработку событий лучше перенести в функции, а в элементах указывать имя функции. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.10.2016, 21:41 |
|
||
|
рефакторинг
|
|||
|---|---|---|---|
|
#18+
liberum, в именах классов, айдишников в качестве разделителя лучше использовать _ , а не - ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.10.2016, 21:43 |
|
||
|
рефакторинг
|
|||
|---|---|---|---|
|
#18+
Спасибо, так быстро много ответов :) ide - IntelliJ IDEA 15 jspf - почитаю, что это и как работать Даты в java8 хотел, но так как сделал на hibernate 4, то они не хотят нормально работать с DB, а при обновлении на hibernate 5, все полетело, целый день пытался вернуть, но в итоге все равно восстановился с бекапа, решил java 8 и hibernate 5 оставить на следующий раз, когда буду переписывать этот проект под spring. Если такой подход не верен, напишите, буду пробовать перейти на этом проекте.. стили - принято, сделаю имена классов - это bootstrap о обработке событий немного не понял, имеется ввиду функционал взятия из базы данных в сервлете вынести из doGet в отдельный метод? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.10.2016, 21:57 |
|
||
|
рефакторинг
|
|||
|---|---|---|---|
|
#18+
liberum, про хибермайт - я против этой прокладки, лишнее звено. <input onclick= "имя_функции();" > <script> function имя_функции(){ } </skript> ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.10.2016, 22:07 |
|
||
|
рефакторинг
|
|||
|---|---|---|---|
|
#18+
liberum, кучу кода занимает таблица. Можно заменить на компонент библиотечную. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.10.2016, 22:12 |
|
||
|
рефакторинг
|
|||
|---|---|---|---|
|
#18+
liberum, Привет, я бы тоэе кое-что посоветовал. 1) Вынеси "MMM dd, YYYY" в константу в отдельный класс, типо DateFormat. Она может много ещё где использоваться. 2) Из jsp выпили все скриплеты. Если надо что-то высчитать, то делай это в других классах, а на jsp передавай потом результат. Обработать результат на самой jsp поможет, к примеру, jstl (погугли). И все, никаких вычислений на jsp. Почему? Потому что ты одну и ту же логику можешь использовать на нескольких jsp, ты же не будет дублировать код много раз? 3) Выноси все аттрибуты style в css файл. Придумай имена классов. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.10.2016, 22:18 |
|
||
|
рефакторинг
|
|||
|---|---|---|---|
|
#18+
вадяliberum, про хибермайт - я против этой прокладки, лишнее звено. Использую исключительно с целью изучения, голый jdbc использовал ранее, знание фреймворков повышает шансы на трудоустройство.. перенести onclick в функцию - принял Заменить таблицу на компонент библиотечную это как? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.10.2016, 22:20 |
|
||
|
рефакторинг
|
|||
|---|---|---|---|
|
#18+
Вынести SimpleDataFormat в константу - принято, сам думал, использую много где. jstl - погуглю вместе с jspf ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.10.2016, 22:25 |
|
||
|
рефакторинг
|
|||
|---|---|---|---|
|
#18+
liberumЗаменить таблицу на компонент библиотечную это как? типа http://www.jtable.org/ ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.10.2016, 22:28 |
|
||
|
рефакторинг
|
|||
|---|---|---|---|
|
#18+
liberumВынести SimpleDataFormat в константу - принято, сам думал, использую много где. jstl - погуглю вместе с jspf SimpleDataFormat не надо в константу, он не tread safe. Вынесите туда строку с форматом. По существу вопроса - переписывать, потому что рефакторить там надо решительно все. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.10.2016, 22:33 |
|
||
|
рефакторинг
|
|||
|---|---|---|---|
|
#18+
fixxerSimpleDataFormat не надо в константу, он не tread safe. Вынесите туда строку с форматом. По существу вопроса - переписывать, потому что рефакторить там надо решительно все. А если не в константу в класс, с методом типа getDate, которая будет возвращать клон? Часто нужна дата округленная до начала суток, что собственно и решаю конструкцией: Код: java 1. 2. Рефакторить хочу что бы знать как писать правильно, если сразу начну переписывать проект, чувствую напишу тот же говнокод, только в профиль.. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.10.2016, 22:55 |
|
||
|
рефакторинг
|
|||
|---|---|---|---|
|
#18+
Petro123liberumЗаменить таблицу на компонент библиотечную это как? типа http://www.jtable.org/ Слишком избыточно.. Кроме того не уверен, что смогу ее заполнить. Заполняется сначала столбик понедельника, потом вторника и т.д. В моем случаи вид таблицы делается с помощью css, а сама таблица имеет всего 2 строки, первая - заглавие, вторая данные на весь день недели. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.10.2016, 23:08 |
|
||
|
рефакторинг
|
|||
|---|---|---|---|
|
#18+
liberum, Код: html 1. https://webref.ru/html/td/valign Код: html 1. 2. 3. Код: html 1. - https://webref.ru/html/title Код: html 1. - https://webref.ru/html/input вообще инпут в div непонятно для чего, ondblclick можно назначить и самому div. https://webref.ru/css https://webref.ru/html http://frontender.info/a-guide-to-flexbox/ https://learn.javascript.ru/ http://jquery.page2page.ru/index.php5/Заглавная_страница по логике js https://www.amazon.com/dp/<%=bookKDP.getAsin() лучше вынести в div Код: html 1. 2. 3. но ещё лучше Код: html 1. 2. 3. Код: javascript 1. 2. 3. 4. 5. по входу с паролём http://findevelop.blogspot.ru/2013/10/web-spring-security-100.html ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.10.2016, 05:31 |
|
||
|
рефакторинг
|
|||
|---|---|---|---|
|
#18+
ЗЫ имена взяты с потолка :) проверить правильность на использование кавычек (двойных и одинарных) к сожалению тут править не сделано ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.10.2016, 05:34 |
|
||
|
рефакторинг
|
|||
|---|---|---|---|
|
#18+
вадя, Ну, кто же в 2016м году скриплеты использует? Для доступа-то к свойствам. EL в JSP уже достаточно хорош чтобы всё на нём писать. Скриплеты это табу. Только в исключительных случаях можно применить, если они действительно упрощают решение. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.10.2016, 08:37 |
|
||
|
рефакторинг
|
|||
|---|---|---|---|
|
#18+
Именовать переменные таким образом Date date2 = c.getTime(); очень плохо, вы скоро забудете чем отличается date от date2, к тому же стороннему человеку решительно непонятно о чем идет речь. Гораздо лучше называть их как Date startDate например. Далее, в сервлете в идеале должно быть только то что связано с HTTP, как то - берем параметры из реквеста и преобразуем их в некий объект, валидация этих параметров и всякие sendRedirect forward и тд. Все остальное выносится в отдельный сервис, например DBService. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.10.2016, 09:01 |
|
||
|
рефакторинг
|
|||
|---|---|---|---|
|
#18+
liberum, Начните с чтения о таких понятиях как Abstract Layer, Model View Controller и Domain Model. Вам нужно четко понимать какая строка кода относитя к представлению, какая к модели предметной области, а какая просто обслуживает HTTP. И эти три вещи надо раздести в разные классы и стараться не смешивать, следуя Single Responsibility Principle. Не используйте скриплеты. В идеале надо JSP заменить на какой-нибудь FreeMarker или Thymeleaf. Но можно использовать и JSP, но разобраться с Expression Language и JSTL. Каждый раз когда вы копируете кусок кода, бейте себя по рукам и ищите способ изменить код. В JSTL есть тэги для циклов, например. А вы накопипастили 6 одинаковых пар строк. Ваши условия if(cl.getTime().getTime() == bookKDP.getPromo1().getTime() за гранью по двум причинам. 1. Почему 1-2-3-4-5 это разные методы? ПОчему не массив? Почему не список? 2. Каждый раз когда вы пишете bookKDP.getPromo2().getTime() это нарушение инкапсуляции. В идеале дожно быть bookKDP.getPromoTime(). bookKDP.getBookAuthorsWriter().getBook().getTitle() это bookKDP.getBookTitle(); "Чистый код" - правильная книга. Дочитайте и начните применять. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.10.2016, 09:29 |
|
||
|
рефакторинг
|
|||
|---|---|---|---|
|
#18+
Потоки потоками, но 10 строк кода для даты это чересчур). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.10.2016, 09:36 |
|
||
|
рефакторинг
|
|||
|---|---|---|---|
|
#18+
liberum Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. И ещё важный момент. Уверен что в книгде об этом тоже было. Научитесь создавать больше методов. Вот с ходу понять что тут происходит - решительно не возможно. Но если вы сделаете этому куску кода extractMethod и дадите методу внятное объясняющее имя, то это значительно повысит читаемость вашего кода. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.10.2016, 09:44 |
|
||
|
рефакторинг
|
|||
|---|---|---|---|
|
#18+
Blazkowiczвадя, Ну, кто же в 2016м году скриплеты использует? Для доступа-то к свойствам. EL в JSP уже достаточно хорош чтобы всё на нём писать. Скриплеты это табу. Только в исключительных случаях можно применить, если они действительно упрощают решение. зачем городить что-то если можно обойтись простым? это табу придумано непонятно кем и для чего, а потом его теражируют... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.10.2016, 09:55 |
|
||
|
рефакторинг
|
|||
|---|---|---|---|
|
#18+
Blazkowiczliberum Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. И ещё важный момент. Уверен что в книгде об этом тоже было. Научитесь создавать больше методов. Вот с ходу понять что тут происходит - решительно не возможно. Но если вы сделаете этому куску кода extractMethod и дадите методу внятное объясняющее имя, то это значительно повысит читаемость вашего кода. У меня тоже вынесло мозг от операций с датой... по моему можно упростить в одну строчку. Календарь и старые форматтеры желательно заменить joda time , в 8 джаве этот пакет уже влючен, он и пошустрее и thread safe в отличие от Calendar. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.10.2016, 09:57 |
|
||
|
|

start [/forum/topic.php?fid=59&fpage=84&tid=2123546]: |
0ms |
get settings: |
10ms |
get forum list: |
19ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
68ms |
get topic data: |
13ms |
get forum data: |
4ms |
get page messages: |
83ms |
get tp. blocked users: |
2ms |
| others: | 245ms |
| total: | 452ms |

| 0 / 0 |
