powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / рефакторинг
107 сообщений из 107, показаны все 5 страниц
рефакторинг
    #39334807
liberum
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Доброго времени суток..
Имеется некий проект предназначенный для более глубокого понимания программирования под 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.
package modules.kdp.servlets;

import modules.general.Factory;
import modules.kdp.dao.BookKDPDao;
import modules.kdp.dto.BookKDP;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.sql.SQLException;
import java.text.SimpleDateFormat;
import java.util.*;

@WebServlet("/promoOld.do")
public class PromoCalendarOld extends HttpServlet {

    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        Factory factory = Factory.getInstance();
        SimpleDateFormat sdf = new SimpleDateFormat("MMM dd, YYYY", Locale.ENGLISH);
        Date date = new Date(sdf.format(new Date()));
        Calendar c = Calendar.getInstance();
        c.setTime(date);
        c.add(Calendar.DATE, -2);
        date = c.getTime();
        c.add(Calendar.DATE, 7);
        Date date2 = c.getTime();
        try {
            BookKDPDao bookKDPDao = factory.getBookKDPDao();
            List<BookKDP> promo = bookKDPDao.getBooksKDPPromoRangeDate(date, date2);
            request.setAttribute("bookAuthors", promo);
        } catch (SQLException e) {
            response.sendRedirect("error.do");
            e.printStackTrace();
        }
        request.getRequestDispatcher("WEB-INF/views/promoCalendarOld.jsp").forward(request, response);
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        resp.setContentType("text/html");

    }
}



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.
<%@ page contentType="text/html;charset=UTF-8" language="java"%>
<%@ include file = "check_user.jsp"%>
<%@ include file = "header.jsp"%>
<%@page import="java.util.List"%>
<%@ page import="modules.kdp.dto.BookKDP" %>
<%@ page import="java.util.Locale" %>
<%@ page import="java.text.SimpleDateFormat" %>
<%@ page import="java.util.Date" %>
<%
    SimpleDateFormat sdf = new SimpleDateFormat("MMM dd, YYYY", Locale.ENGLISH);
    SimpleDateFormat sdf2 = new SimpleDateFormat("EEEEE / MMM dd", Locale.ENGLISH);
    Date date = new Date(sdf.format(new Date()));
    Calendar cl = Calendar.getInstance();
    cl.setTime(date);
    cl.add(Calendar.DATE, -2);
%>

<div class="container-fluid">
    <table  style="width:100%" border="1" align="center" frame="void">
        <thead>
        <tr bgcolor="black"  style="color: white;" align="center">
            <th style="width:14.3%; text-align: center;"><%=sdf2.format(cl.getTime()) %></th>
            <%cl.add(Calendar.DATE, 1);%>
            <th style="width:14.3%; text-align: center;"><%=sdf2.format(cl.getTime()) %></th>
            <%cl.add(Calendar.DATE, 1);%>
            <th style="width:14.3%; text-align: center;"><%=sdf2.format(cl.getTime()) %></th>
            <%cl.add(Calendar.DATE, 1);%>
            <th style="width:14.3%; text-align: center;"><%=sdf2.format(cl.getTime()) %></th>
            <%cl.add(Calendar.DATE, 1);%>
            <th style="width:14.3%; text-align: center;"><%=sdf2.format(cl.getTime()) %></th>
            <%cl.add(Calendar.DATE, 1);%>
            <th style="width:14.3%; text-align: center;"><%=sdf2.format(cl.getTime()) %></th>
            <%cl.add(Calendar.DATE, 1);%>
            <th style="width:14.3%; text-align: center;"><%=sdf2.format(cl.getTime()) %></th>
        </tr>
        </thead>
        <tbody>
        <tr valign="top">
            <td>
                <%
                    cl.setTime(date);
                    cl.add(Calendar.DATE, -2);
                    List<BookKDP> books = (List<BookKDP>) request.getAttribute("bookAuthors");
                    for(BookKDP bookKDP: books) {
                        if(cl.getTime().getTime() == bookKDP.getPromo1().getTime()
                                || cl.getTime().getTime() == bookKDP.getPromo2().getTime()
                                || cl.getTime().getTime() == bookKDP.getPromo3().getTime()
                                || cl.getTime().getTime() == bookKDP.getPromo4().getTime()
                                || cl.getTime().getTime() == bookKDP.getPromo5().getTime()
                                ){
                %>
                <div style="width:100%;overflow:hidden;">
                    <input type="text" style="width: 100%; background: #f1f1f1;" title=" <%= bookKDP.getBookAuthorsWriter().getBook().getTitle() %> " ondblclick="window.open('https://www.amazon.com/dp/<%=bookKDP.getAsin()%>','_blank')" readonly="" value=" <%= bookKDP.getBookAuthorsWriter().getBook().getTitle() %>">
                </div>
                <%  }};  %>
            </td>
            <td>
                <%  cl.add(Calendar.DATE, 1);
                    for(BookKDP bookKDP: books) {
                        if(cl.getTime().getTime() == bookKDP.getPromo1().getTime()
                                || cl.getTime().getTime() == bookKDP.getPromo2().getTime()
                                || cl.getTime().getTime() == bookKDP.getPromo3().getTime()
                                || cl.getTime().getTime() == bookKDP.getPromo4().getTime()
                                || cl.getTime().getTime() == bookKDP.getPromo5().getTime()
                                ){
                %>
                <div style="width:100%;overflow:hidden;">
                    <input type="text" style="width: 100%; background: #f1f1f1;" title=" <%= bookKDP.getBookAuthorsWriter().getBook().getTitle() %> " ondblclick="window.open('https://www.amazon.com/dp/<%=bookKDP.getAsin()%>','_blank')" readonly="" value=" <%= bookKDP.getBookAuthorsWriter().getBook().getTitle() %>">
                </div>
                <%  }};  %>
            </td>
            <td>
                <%  cl.add(Calendar.DATE, 1);
                    for(BookKDP bookKDP: books) {
                        if(cl.getTime().getTime() == bookKDP.getPromo1().getTime()
                                || cl.getTime().getTime() == bookKDP.getPromo2().getTime()
                                || cl.getTime().getTime() == bookKDP.getPromo3().getTime()
                                || cl.getTime().getTime() == bookKDP.getPromo4().getTime()
                                || cl.getTime().getTime() == bookKDP.getPromo5().getTime()
                                ){
                %>
                <div style="width:100%;overflow:hidden;">
                    <input type="text" style="width: 100%; background: #f1f1f1;" title=" <%= bookKDP.getBookAuthorsWriter().getBook().getTitle() %> " ondblclick="window.open('https://www.amazon.com/dp/<%=bookKDP.getAsin()%>','_blank')" readonly="" value=" <%= bookKDP.getBookAuthorsWriter().getBook().getTitle() %>">
                </div>
                <%  }};  %>
            </td>
            <td>
                <%  cl.add(Calendar.DATE, 1);
                    for(BookKDP bookKDP: books) {
                        if(cl.getTime().getTime() == bookKDP.getPromo1().getTime()
                                || cl.getTime().getTime() == bookKDP.getPromo2().getTime()
                                || cl.getTime().getTime() == bookKDP.getPromo3().getTime()
                                || cl.getTime().getTime() == bookKDP.getPromo4().getTime()
                                || cl.getTime().getTime() == bookKDP.getPromo5().getTime()
                                ){
                %>
                <div style="width:100%;overflow:hidden;">
                    <input type="text" style="width: 100%; background: #f1f1f1;" title=" <%= bookKDP.getBookAuthorsWriter().getBook().getTitle() %> " ondblclick="window.open('https://www.amazon.com/dp/<%=bookKDP.getAsin()%>','_blank')" readonly="" value=" <%= bookKDP.getBookAuthorsWriter().getBook().getTitle() %>">
                </div>
                <%  }};  %>
            </td>
            <td>
                <%  cl.add(Calendar.DATE, 1);
                    for(BookKDP bookKDP: books) {
                        if(cl.getTime().getTime() == bookKDP.getPromo1().getTime()
                                || cl.getTime().getTime() == bookKDP.getPromo2().getTime()
                                || cl.getTime().getTime() == bookKDP.getPromo3().getTime()
                                || cl.getTime().getTime() == bookKDP.getPromo4().getTime()
                                || cl.getTime().getTime() == bookKDP.getPromo5().getTime()
                                ){
                %>
                <div style="width:100%;overflow:hidden;">
                    <input type="text" style="width: 100%; background: #f1f1f1;" title=" <%= bookKDP.getBookAuthorsWriter().getBook().getTitle() %> " ondblclick="window.open('https://www.amazon.com/dp/<%=bookKDP.getAsin()%>','_blank')" readonly="" value=" <%= bookKDP.getBookAuthorsWriter().getBook().getTitle() %>">
                </div>
                <%  }};  %>
            </td>
            <td>
                <%  cl.add(Calendar.DATE, 1);
                    for(BookKDP bookKDP: books) {
                        if(cl.getTime().getTime() == bookKDP.getPromo1().getTime()
                                || cl.getTime().getTime() == bookKDP.getPromo2().getTime()
                                || cl.getTime().getTime() == bookKDP.getPromo3().getTime()
                                || cl.getTime().getTime() == bookKDP.getPromo4().getTime()
                                || cl.getTime().getTime() == bookKDP.getPromo5().getTime()
                                ){
                %>
                <div style="width:100%;overflow:hidden;">
                    <input type="text" style="width: 100%; background: #f1f1f1;" title=" <%= bookKDP.getBookAuthorsWriter().getBook().getTitle() %> " ondblclick="window.open('https://www.amazon.com/dp/<%=bookKDP.getAsin()%>','_blank')" readonly="" value=" <%= bookKDP.getBookAuthorsWriter().getBook().getTitle() %>">
                </div>
                <%  }};  %>
            </td>
            <td>
                <%  cl.add(Calendar.DATE, 1);
                    for(BookKDP bookKDP: books) {
                        if(cl.getTime().getTime() == bookKDP.getPromo1().getTime()
                                || cl.getTime().getTime() == bookKDP.getPromo2().getTime()
                                || cl.getTime().getTime() == bookKDP.getPromo3().getTime()
                                || cl.getTime().getTime() == bookKDP.getPromo4().getTime()
                                || cl.getTime().getTime() == bookKDP.getPromo5().getTime()
                                ){
                %>
                <div style="width:100%;overflow:hidden;">
                    <input type="text" style="width: 100%; background: #f1f1f1;" title=" <%= bookKDP.getBookAuthorsWriter().getBook().getTitle() %> " ondblclick="window.open('https://www.amazon.com/dp/<%=bookKDP.getAsin()%>','_blank')" readonly="" value=" <%= bookKDP.getBookAuthorsWriter().getBook().getTitle() %>">
                </div>
                <%  }};  %>
            </td>
        </tr>
        </tbody>
    </table>
</div>
<%@ include file = "footer.jsp"%>

...
Рейтинг: 0 / 0
рефакторинг
    #39334815
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
liberum,
какой ide пользуешься.?
инклуд лучше делать фалы jspf
...
Рейтинг: 0 / 0
рефакторинг
    #39334816
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
liberum,
для даты лучше использовать фишки даты java8
...
Рейтинг: 0 / 0
рефакторинг
    #39334819
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
liberum,
стили задавать в файлах css
...
Рейтинг: 0 / 0
рефакторинг
    #39334822
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
liberum,
обработку событий лучше перенести в функции, а в элементах указывать имя функции.
...
Рейтинг: 0 / 0
рефакторинг
    #39334823
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
liberum,
в именах классов, айдишников в качестве разделителя лучше использовать _ , а не -
...
Рейтинг: 0 / 0
рефакторинг
    #39334829
liberum
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо, так быстро много ответов :)
ide - IntelliJ IDEA 15
jspf - почитаю, что это и как работать

Даты в java8 хотел, но так как сделал на hibernate 4, то они не хотят нормально работать с DB, а при обновлении на hibernate 5, все полетело, целый день пытался вернуть, но в итоге все равно восстановился с бекапа, решил java 8 и hibernate 5 оставить на следующий раз, когда буду переписывать этот проект под spring. Если такой подход не верен, напишите, буду пробовать перейти на этом проекте..

стили - принято, сделаю

имена классов - это bootstrap

о обработке событий немного не понял, имеется ввиду функционал взятия из базы данных в сервлете вынести из doGet в отдельный метод?
...
Рейтинг: 0 / 0
рефакторинг
    #39334832
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
liberum,
про хибермайт - я против этой прокладки, лишнее звено.
<input onclick= "имя_функции();" >


<script>
function имя_функции(){


}

</skript>
...
Рейтинг: 0 / 0
рефакторинг
    #39334834
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
liberum,
кучу кода занимает таблица. Можно заменить на компонент библиотечную.
...
Рейтинг: 0 / 0
рефакторинг
    #39334838
Фотография Паша01
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
liberum,

Привет, я бы тоэе кое-что посоветовал.
1) Вынеси "MMM dd, YYYY" в константу в отдельный класс, типо DateFormat. Она может много ещё где использоваться.
2) Из jsp выпили все скриплеты. Если надо что-то высчитать, то делай это в других классах, а на jsp передавай потом результат. Обработать результат на самой jsp поможет, к примеру, jstl (погугли). И все, никаких вычислений на jsp. Почему? Потому что ты одну и ту же логику можешь использовать на нескольких jsp, ты же не будет дублировать код много раз?
3) Выноси все аттрибуты style в css файл. Придумай имена классов.
...
Рейтинг: 0 / 0
рефакторинг
    #39334839
liberum
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
вадяliberum,
про хибермайт - я против этой прокладки, лишнее звено.


Использую исключительно с целью изучения, голый jdbc использовал ранее, знание фреймворков повышает шансы на трудоустройство..

перенести onclick в функцию - принял


Заменить таблицу на компонент библиотечную это как?
...
Рейтинг: 0 / 0
рефакторинг
    #39334841
liberum
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вынести SimpleDataFormat в константу - принято, сам думал, использую много где.
jstl - погуглю вместе с jspf
...
Рейтинг: 0 / 0
рефакторинг
    #39334843
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
liberumЗаменить таблицу на компонент библиотечную это как?
типа http://www.jtable.org/
...
Рейтинг: 0 / 0
рефакторинг
    #39334844
Фотография fixxer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
liberumВынести SimpleDataFormat в константу - принято, сам думал, использую много где.
jstl - погуглю вместе с jspf

SimpleDataFormat не надо в константу, он не tread safe. Вынесите туда строку с форматом. По существу вопроса - переписывать, потому что рефакторить там надо решительно все.
...
Рейтинг: 0 / 0
рефакторинг
    #39334853
liberum
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
fixxerSimpleDataFormat не надо в константу, он не tread safe. Вынесите туда строку с форматом. По существу вопроса - переписывать, потому что рефакторить там надо решительно все.
А если не в константу в класс, с методом типа getDate, которая будет возвращать клон? Часто нужна дата округленная до начала суток, что собственно и решаю конструкцией:
Код: java
1.
2.
        SimpleDateFormat sdf = new SimpleDateFormat("MMM dd, YYYY", Locale.ENGLISH);
        Date date = new Date(sdf.format(new Date()));



Рефакторить хочу что бы знать как писать правильно, если сразу начну переписывать проект, чувствую напишу тот же говнокод, только в профиль..
...
Рейтинг: 0 / 0
рефакторинг
    #39334855
liberum
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Petro123liberumЗаменить таблицу на компонент библиотечную это как?
типа http://www.jtable.org/

Слишком избыточно.. Кроме того не уверен, что смогу ее заполнить. Заполняется сначала столбик понедельника, потом вторника и т.д. В моем случаи вид таблицы делается с помощью css, а сама таблица имеет всего 2 строки, первая - заглавие, вторая данные на весь день недели.
...
Рейтинг: 0 / 0
рефакторинг
    #39334908
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
liberum,
Код: html
1.
      <tr valign="top">


https://webref.ru/html/td/valign

Код: html
1.
2.
3.
 <div style="width:100%;overflow:hidden;">
                    <input type="text" style="width: 100%; background: #f1f1f1;" title=" <%= bookKDP.getBookAuthorsWriter().getBook().getTitle() %> " ondblclick="window.open('https://www.amazon.com/dp/<%=bookKDP.getAsin()%>','_blank')" readonly="" value=" <%= bookKDP.getBookAuthorsWriter().getBook().getTitle() %>">
                </div>



Код: html
1.
title  

- https://webref.ru/html/title

Код: html
1.
input

- 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.
<div class='vvv' ondblclick="window.open('https://www.amazon.com/dp/<%=bookKDP.getAsin()%>','_blank')">
<%= bookKDP.getBookAuthorsWriter().getBook().getTitle() %>">
</div>



но ещё лучше
Код: html
1.
2.
3.
<div class='vvv' ondblclick="fff(%=bookKDP.getAsin()%>);')">
<%= bookKDP.getBookAuthorsWriter().getBook().getTitle() %>">
</div>



Код: javascript
1.
2.
3.
4.
5.
<script>
function fff(p){
window.open('https://www.amazon.com/dp/'+p,'_blank');
}
</script>



по входу с паролём http://findevelop.blogspot.ru/2013/10/web-spring-security-100.html
...
Рейтинг: 0 / 0
рефакторинг
    #39334909
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ЗЫ
имена взяты с потолка :)
проверить правильность на использование кавычек (двойных и одинарных) к сожалению тут править не сделано
...
Рейтинг: 0 / 0
рефакторинг
    #39334933
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вадя,

Ну, кто же в 2016м году скриплеты использует? Для доступа-то к свойствам. EL в JSP уже достаточно хорош чтобы всё на нём писать. Скриплеты это табу. Только в исключительных случаях можно применить, если они действительно упрощают решение.
...
Рейтинг: 0 / 0
рефакторинг
    #39334940
забыл ник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Именовать переменные таким образом Date date2 = c.getTime(); очень плохо, вы скоро забудете чем отличается date от date2, к тому же стороннему человеку решительно непонятно о чем идет речь. Гораздо лучше называть их как Date startDate например.
Далее, в сервлете в идеале должно быть только то что связано с HTTP, как то - берем параметры из реквеста и преобразуем их в некий объект, валидация этих параметров и всякие sendRedirect forward и тд. Все остальное выносится в отдельный сервис, например DBService.
...
Рейтинг: 0 / 0
рефакторинг
    #39334962
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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();


"Чистый код" - правильная книга. Дочитайте и начните применять.
...
Рейтинг: 0 / 0
рефакторинг
    #39334969
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Потоки потоками, но 10 строк кода для даты это чересчур).
...
Рейтинг: 0 / 0
рефакторинг
    #39334973
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
liberum
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
        Factory factory = Factory.getInstance();
        SimpleDateFormat sdf = new SimpleDateFormat("MMM dd, YYYY", Locale.ENGLISH);
        Date date = new Date(sdf.format(new Date()));
        Calendar c = Calendar.getInstance();
        c.setTime(date);
        c.add(Calendar.DATE, -2);
        date = c.getTime();
        c.add(Calendar.DATE, 7);
        Date date2 = c.getTime();



И ещё важный момент. Уверен что в книгде об этом тоже было. Научитесь создавать больше методов. Вот с ходу понять что тут происходит - решительно не возможно. Но если вы сделаете этому куску кода extractMethod и дадите методу внятное объясняющее имя, то это значительно повысит читаемость вашего кода.
...
Рейтинг: 0 / 0
рефакторинг
    #39334984
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Blazkowiczвадя,

Ну, кто же в 2016м году скриплеты использует? Для доступа-то к свойствам. EL в JSP уже достаточно хорош чтобы всё на нём писать. Скриплеты это табу. Только в исключительных случаях можно применить, если они действительно упрощают решение.
зачем городить что-то если можно обойтись простым?
это табу придумано непонятно кем и для чего, а потом его теражируют...
...
Рейтинг: 0 / 0
рефакторинг
    #39334987
uid unique
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Blazkowiczliberum
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
        Factory factory = Factory.getInstance();
        SimpleDateFormat sdf = new SimpleDateFormat("MMM dd, YYYY", Locale.ENGLISH);
        Date date = new Date(sdf.format(new Date()));
        Calendar c = Calendar.getInstance();
        c.setTime(date);
        c.add(Calendar.DATE, -2);
        date = c.getTime();
        c.add(Calendar.DATE, 7);
        Date date2 = c.getTime();



И ещё важный момент. Уверен что в книгде об этом тоже было. Научитесь создавать больше методов. Вот с ходу понять что тут происходит - решительно не возможно. Но если вы сделаете этому куску кода extractMethod и дадите методу внятное объясняющее имя, то это значительно повысит читаемость вашего кода.

У меня тоже вынесло мозг от операций с датой... по моему можно упростить в одну строчку.
Календарь и старые форматтеры желательно заменить joda time , в 8 джаве этот пакет уже влючен, он и пошустрее и thread safe в отличие от Calendar.
...
Рейтинг: 0 / 0
рефакторинг
    #39334993
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вадязачем городить что-то если можно обойтись простым?

Простым? Прикалываешься? Сравни:

Код: html
1.
2.
3.
<input type="text" style="width: 100%; background: #f1f1f1;" title=" <%= bookKDP.getBookAuthorsWriter().getBook().getTitle() %> " ondblclick="window.open('https://www.amazon.com/dp/<%=bookKDP.getAsin()%>','_blank')" readonly="" value=" <%= bookKDP.getBookAuthorsWriter().getBook().getTitle() %>">

<input type="text" style="width: 100%; background: #f1f1f1;" title="${bookKDP.bookTitle}" ondblclick="window.open('https://www.amazon.com/dp/${bookKDP.asin}>','_blank')" readonly="" value="${bookKDP.bookTitle}">



вадяэто табу придумано непонятно кем и для чего, а потом его теражируют...
Табу придумано тем кто заманался выдирать логику предметной области из представления. И придумано лет 15 назад, если не раньше.
...
Рейтинг: 0 / 0
рефакторинг
    #39334994
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
uid uniqueв 8 джаве этот пакет уже влючен, он и пошустрее и thread safe в отличие от Calendar.
Но слегка урезан по сравнению с оригинальным Joda Time.
...
Рейтинг: 0 / 0
рефакторинг
    #39334995
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вадя,
Глупо спорить с jstl или скрипплеты.
С тобой не спорят что события в фунеции.
Это тоже самое.
...
Рейтинг: 0 / 0
рефакторинг
    #39334996
uid unique
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
uid uniqueBlazkowiczпропущено...

И ещё важный момент. Уверен что в книгде об этом тоже было. Научитесь создавать больше методов. Вот с ходу понять что тут происходит - решительно не возможно. Но если вы сделаете этому куску кода extractMethod и дадите методу внятное объясняющее имя, то это значительно повысит читаемость вашего кода.

У меня тоже вынесло мозг от операций с датой... по моему можно упростить в одну строчку.
Календарь и старые форматтеры желательно заменить joda time , в 8 джаве этот пакет уже влючен, он и пошустрее и thread safe в отличие от Calendar.
Что то подобное слепить можно с джодой:

Код: java
1.
2.
3.
DateTime now = new DateTime(System.currentTimeMillis());
		
someMethod(now.minusDays(2).toDate(), now.plusDays(7).toDate());
...
Рейтинг: 0 / 0
рефакторинг
    #39335000
uid unique
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
uid uniqueuid uniqueпропущено...


У меня тоже вынесло мозг от операций с датой... по моему можно упростить в одну строчку.
Календарь и старые форматтеры желательно заменить joda time , в 8 джаве этот пакет уже влючен, он и пошустрее и thread safe в отличие от Calendar.
Что то подобное слепить можно с джодой:

Код: java
1.
2.
3.
DateTime now = new DateTime(System.currentTimeMillis());
		
someMethod(now.minusDays(2).toDate(), now.plusDays(7).toDate());


Еще вдогонку не забудьте про time zone, если она нужна, дата в локальной зоне будет отличаться от GMT (now нужно инициализировать с зоной или сделать шифт, в джоде это есть).
...
Рейтинг: 0 / 0
рефакторинг
    #39335009
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Blazkowiczвадя,

Ну, кто же в 2016м году скриплеты использует? Для доступа-то к свойствам. EL в JSP уже достаточно хорош чтобы всё на нём писать. Скриплеты это табу. Только в исключительных случаях можно применить, если они действительно упрощают решение.
и где же ты в моем примере нашёл скриплет?
только выражение
...
Рейтинг: 0 / 0
рефакторинг
    #39335016
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вадяи где же ты в моем примере нашёл скриплет?
только выражение
Вот:
Код: html
1.
<%= ... %>
...
Рейтинг: 0 / 0
рефакторинг
    #39335019
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123вадя,
Глупо спорить с jstl или скрипплеты.
С тобой не спорят что события в фунеции.
Это тоже самое.

С тобой не спорят что события в фунеции.
Это тоже самое

нука про это попподробнее.
а где должны они быть?
...
Рейтинг: 0 / 0
рефакторинг
    #39335022
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Blazkowicz,

Код: javascript
1.
<%= ... %>


это называется выражение.
...
Рейтинг: 0 / 0
рефакторинг
    #39335035
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вадяBlazkowicz,

Код: javascript
1.
<%= ... %>


это называется выражение.
Это называется путаница в терминах
JSP Scriptlet - который табу, но в крайних случаях бывает полезен именно в JSP
http://docs.oracle.com/javaee/5/tutorial/doc/bnaou.html
JSP Expression - который нафиг не нужен
http://docs.oracle.com/javaee/5/tutorial/doc/bnaov.html
Unified Expression Language - который упрощает JSP код и делает его HTML friendly
http://docs.oracle.com/javaee/5/tutorial/doc/bnahq.html
...
Рейтинг: 0 / 0
рефакторинг
    #39335058
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Blazkowicz,
уж если заниматься буквоедством - то в моём примере JSP Expression
а JSP Scriptlet у ТС.
...
Рейтинг: 0 / 0
рефакторинг
    #39335065
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Blazkowicz,
а вот насчёт
Unified Expression Language - который упрощает JSP код и делает его HTML friendly
вопрос спорный
по сути вводится ещё один язык программирования симбиоз java и HTML разметки
что только усложняет построение этой самой разметки.
по мимо дополнительного кода для его построения и кода на выпонение при формировании страницы.
...
Рейтинг: 0 / 0
рефакторинг
    #39335070
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вадяуж если заниматься буквоедством - то в моём примере JSP Expression
а JSP Scriptlet у ТС.
Продолжаем заниматься ерундой:
In JavaServer Pages (JSP) technology, a scriptlet is a piece of Java-code embedded in the HTML-like JSP code.
...
Рейтинг: 0 / 0
рефакторинг
    #39335074
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Blazkowiczвадяуж если заниматься буквоедством - то в моём примере JSP Expression
а JSP Scriptlet у ТС.
Продолжаем заниматься ерундой:
In JavaServer Pages (JSP) technology, a scriptlet is a piece of Java-code embedded in the HTML-like JSP code.
тогда нахера ты дал три ссылки? сначала разделяешь , а потом объединяешь понятия?
при буквоедстве так быстро переобуваться не стоит
...
Рейтинг: 0 / 0
рефакторинг
    #39335090
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вадятогда нахера ты дал три ссылки?

Чтобы объяснить таким непонятливым, откуда путаница в терминологии.

вадясначала разделяешь , а потом объединяешь понятия?
при буквоедстве так быстро переобуваться не стоит
Я с самого начала сказал про "скриплеты", ты начал буквоедствовать. Твой код это скриплет, который в JEE называют JSP Expression только потому что этот скриплет должен возвращать результат. В обиходе же expression это EL. Не думал что тебе придется такие основы объяснять.
...
Рейтинг: 0 / 0
рефакторинг
    #39335100
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Blazkowicz,
потому что про скриплеты у ТС ты ни слова не сказал , а к моим прицепился,
я просто исправил код HTML на правильный и вместо нескольких выражений оставил одно.
...
Рейтинг: 0 / 0
рефакторинг
    #39335108
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вадяпотому что про скриплеты у ТС ты ни слова не сказал , а к моим прицепился,

И ты посчитал это личным оскорблением. Какой тонкой душевной натуры человек. Ну, извини.

вадяя просто исправил код HTML на правильный и вместо нескольких выражений оставил одно.
Ну, вот, а я добавил, что скриплеты тоже стоило выкинуть, потому что "они зло".
...
Рейтинг: 0 / 0
рефакторинг
    #39335127
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вадя С тобой не спорят что события в фунеции.
Это тоже самое

нука про это попподробнее.
а где должны они быть?
не борись с ветряными мельницами.
Я сказал, что Согласен с тобой (не спорю) относительно твоих постов по JS.
Про JSTL толку с тобой говорить, если ты его не писал.
...
Рейтинг: 0 / 0
рефакторинг
    #39335153
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторНу, вот, а я добавил, что скриплеты тоже стоило выкинуть, потому что "они зло".
спорное утверждение, если учесть сколько дополниельного кода надо добавить дл JSTL .

авторне борись с ветряными мельницами.
Я сказал, что Согласен с тобой (не спорю) относительно твоих постов по JS.
будь точнее в своих выражения.
...
Рейтинг: 0 / 0
рефакторинг
    #39335159
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вадяспорное утверждение, если учесть сколько дополниельного кода надо добавить дл JSTL .

Во-первых ни сколько не надо.
Во-вторых JSTL это не EL.
...
Рейтинг: 0 / 0
рефакторинг
    #39335186
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вадяесли учесть сколько дополниельного кода надо добавить дл JSTL
я же говорю, что ни разу не писал:

Код: html
1.
2.
3.
4.
5.
6.
7.
8.
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<!DOCTYPE .....
...
<div id="links" class="links">
	<c:forEach var="i" begin="1" end="12345" step="1">
              <a href="/media/video/${i}" />.AVI" download>Скачать${i}..., </a>
	</c:forEach>
</div>
...
Рейтинг: 0 / 0
рефакторинг
    #39335188
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Blazkowiczвадяспорное утверждение, если учесть сколько дополниельного кода надо добавить дл JSTL .

Во-первых ни сколько не надо.
Во-вторых JSTL это не EL.
взял пример http://devcolibri.com/1250
нафига ещё разбираться в дополнительном языке??????
когда внизу показано
Код: plaintext
1.
2.
3.
4.
Вы конечно можете использовать java вставки:
<%
    int a = 5;
    int b = a + 10;
%>
просто и наглядно по сравнению с кодом , который описан выше на странице.
даже если посчитать количество строк(не говоря уж о символах ) будет больше.
это если будут платить за количество строк - тогда ещё можно понять.
а такое
Код: plaintext
но если использовать такие вставки то вы не сможете контролировать ход действий или как то их отследить.
голословное утверждение -ход каких действий, отслеживать что??
Код: plaintext
1.
По этому рекомендуется использовать jstl и желательно не использовать какие то вычисления или обработки данных на jsp странице, это нужно выполнять на стороне сервера.
это вообще бред
и это такие выносят табу?????
...
Рейтинг: 0 / 0
рефакторинг
    #39335191
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вадяэто вообще бред
тут просто Обычная лень для изучения всего нового. Что в JS, что в Java.
...
Рейтинг: 0 / 0
рефакторинг
    #39335204
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: javascript
1.
2.
3.
4.
5.
6.
<div id="links" class="links">
<% int i=0;
    while(++i<1234){
        out.print(String.format("<a href='/media/video/%i.AVI' download>Скачать%i..., </a>",i));
    } %>
</div>


ни чуть не хуже.
если учесть во что транслирется jsp страница .

автортут просто Обычная лень для изучения всего нового. Что в JS, что в Java.
ты вникнись в смысл там написанного...
...
Рейтинг: 0 / 0
рефакторинг
    #39335220
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вадяни чуть не хуже.

Если ты не видишь разницы, тогда разговор продолжать бесполезно.

вадяесли учесть во что транслирется jsp страница .

Да пофигу во что транслируется. Это не сервлету потом читать код и вносить в него изменения. Какие-то нелепые нюансы технической реализации никак не влияют на качество кода. Говно код нельзя оправдывать тем что он будет работать, например, в интерпретаторе и всё равно будет медленным.
...
Рейтинг: 0 / 0
рефакторинг
    #39335242
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вадяни чуть не хуже.
если учесть во что транслирется jsp страница .
ничего нового ты уже не скажешь. Всё как 5 лет назад. Удачи!
...
Рейтинг: 0 / 0
рефакторинг
    #39336063
Музаффар
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
:) Вас всех собрать в одну контору и надо перед вами поставить задачу и чтоб Вы решили совместно...

интересно что будет... :)
...
Рейтинг: 0 / 0
рефакторинг
    #39336091
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Музаффар,
)) известный спор - программизм это творчество или рутина)
...
Рейтинг: 0 / 0
рефакторинг
    #39336152
Музаффар
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123,

просто основные мемберы этого форума заходит читать именно Ваши споры... в том числе я тоже т.к. много полезного можно изъять :)
за это спасибо знатокам (Вам и Ваде и Блазговичу и другим...)

а насчет совместной работы могу предположить что первый проект будет скорей всего не в срок но после получится крутые проекты... хотя ИМХО.
...
Рейтинг: 0 / 0
рефакторинг
    #39336175
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Музаффармогу предположить что первый проект будет скорей всего не в срок
если РП - Железный Феликс, то в срок).
...
Рейтинг: 0 / 0
рефакторинг
    #39336221
lleming
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123Музаффармогу предположить что первый проект будет скорей всего не в срок
если РП - Железный Феликс, то в срок).

Если РП железный феликс то не только проект будет сдан в срок.
Но и население обеспечено предметами первной необходимости, продовольствие не менее через на неделю вперед.
...
Рейтинг: 0 / 0
рефакторинг
    #39336233
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторесли РП - Железный Феликс, то в срок).

кроме свойств железного Феликса, должна быть голова -иначе кибернетика будет объявлена лженаукой
...
Рейтинг: 0 / 0
рефакторинг
    #39336240
Музаффар
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123,

тут много факторов но самый главный из них это Ваши споры... если согласованно будете работать то точно в срок без железного феликса
...
Рейтинг: 0 / 0
рефакторинг
    #39336261
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
OFF
Музаффартут много факторов но самый главный из них это Ваши споры... если согласованно будете работать то точно в срок без железного феликса
А кто по вашему Согласователь?))
...
Рейтинг: 0 / 0
рефакторинг
    #39336271
Музаффар
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123А кто по вашему Согласователь?))

это и есть больщущий вопрос :)
...
Рейтинг: 0 / 0
рефакторинг
    #39336276
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
МузаффарPetro123А кто по вашему Согласователь?))
это и есть больщущий вопрос :)
Тогда это в топике Религия или ПТ.
Тут обычные технари - инженеры.
...
Рейтинг: 0 / 0
рефакторинг
    #39336588
liberum
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Начал переписывать..
На данный момент столкнулся с несколькими проблемами.
Сделал отдельно класс с датами. Класс умеет:
getEndWeek() - возвращать последний день текущей недели
getStartWeek() - возвращать первый день текущей недели
getThisDayPromo() - возвращать текущую дату если уже больше 10 часов дня, и вчерашнюю если меньше
getDateFormatMDY() - превращать дату в строку стандартного формата
getDateFormatWeek() - превращать дату в строку с указанием дня недели
getStartThisDay() - возвращать новый объект даты округленный до начала суток

DifferentDates
Код: 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.
package modules.util;

import org.joda.time.DateTime;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.Locale;

public class DifferentDates {
    private String dateFormatMDY = "MMM dd, YYYY";
    private String weekFormat = "EEEEE / MMM dd";

    public Date getEndWeek(){
        DateTime startWeek = new DateTime(getStartWeek());
        return startWeek.plusDays(6).toDate();
    }

    public Date getStartWeek(){
        DateTime thisDay = new DateTime(getStartThisDay());
        return thisDay.minusDays(thisDay.getDayOfWeek()).toDate();
    }

    public Date getThisDayPromo(){
        Date thisDay = getStartThisDay();
        Calendar c = Calendar.getInstance();
        c.setTime(thisDay);
        if(Calendar.getInstance().get(Calendar.HOUR_OF_DAY) < 10)
            c.add(Calendar.DATE, -1);
        return c.getTime();
    }

    public String getDateFormatMDY(Date date){
        return new SimpleDateFormat(dateFormatMDY, Locale.ENGLISH).format(date);
    }

    public String getDateFormatWeek(Date date){
        return new SimpleDateFormat(weekFormat, Locale.ENGLISH).format(date);
    }

    public Date getStartThisDay(Date date){
        return  new Date(new SimpleDateFormat(dateFormatMDY, Locale.ENGLISH).format(date));
    }
}



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

Пример моего теста:

TestDifferentDates
Код: 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.
package util;

import modules.util.DifferentDates;
import org.junit.Test;
import static junit.framework.Assert.assertEquals;

public class TestDifferentDates {

    @Test
    public void testGetStartWeek(){
        DifferentDates dates = new DifferentDates();
        long exp = dates.getStartWeek().getTime();;
        long act = 1477170000000l;
        assertEquals(exp, act);
    }

    @Test
    public void testGetEndWeek(){
        DifferentDates dates = new DifferentDates();
        long exp = dates.getEndWeek().getTime();
        long act = 1477688400000l;
        assertEquals(exp, act);
    }
}




Часть css перенес, получилось примерно так:

таблица заголовок
Код: html
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
  <table  class="table_week_main">
        <thead>
        <tr class="table_week_heat_tr">
            <th class="table_week_head"><%=sdf2.format(cl.getTime()) %></th>
            <%cl.add(Calendar.DATE, 1);%>
            <th class="table_week_head"><%=sdf2.format(cl.getTime()) %></th>
            <%cl.add(Calendar.DATE, 1);%>
            <th class="table_week_head"><%=sdf2.format(cl.getTime()) %></th>
            <%cl.add(Calendar.DATE, 1);%>
            <th class="table_week_head"><%=sdf2.format(cl.getTime()) %></th>
            <%cl.add(Calendar.DATE, 1);%>
            <th class="table_week_head"><%=sdf2.format(cl.getTime()) %></th>
            <%cl.add(Calendar.DATE, 1);%>
            <th class="table_week_head"><%=sdf2.format(cl.getTime()) %></th>
            <%cl.add(Calendar.DATE, 1);%>
            <th class="table_week_head"><%=sdf2.format(cl.getTime()) %></th>
        </tr>
        </thead>



таблица данные
Код: html
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
            <td>
                <div class="table_week_data_div">
                    <input class="table_week_data" title="<%=  title %>" ondblclick=openBook('<%=asin%>') readonly="" value="<%= title %>">
                </div>
                <%  }};  %>
            </td>

<script>
    function openBook(asin){
        window.open('https://www.amazon.com/dp/'+asin, '_blank');
    }
</script>



Заголовок таблицы можно вынести в цикл, это сделаю когда буду переделывать с помощью JSTL, сейчас читаю о нем, вроде не сложно. Так же там переделаю мои ужасные условия, для них планирую сделать 7 вызовов с БД по 1 на каждый день недели, вместо 1 вызова за всю неделю и 7 циклов с условиями для выбора нужной даты. На данный момент больше интерисует рефакторинг css и js

ответ Вадивадяliberum,
Код: html
1.
      <tr valign="top">


https://webref.ru/html/td/valign

Код: html
1.
2.
3.
 <div style="width:100%;overflow:hidden;">
                    <input type="text" style="width: 100%; background: #f1f1f1;" title=" <%= bookKDP.getBookAuthorsWriter().getBook().getTitle() %> " ondblclick="window.open('https://www.amazon.com/dp/<%=bookKDP.getAsin()%>','_blank')" readonly="" value=" <%= bookKDP.getBookAuthorsWriter().getBook().getTitle() %>">
                </div>



Код: html
1.
title  

- https://webref.ru/html/title

Код: html
1.
input

- 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.
<div class='vvv' ondblclick="window.open('https://www.amazon.com/dp/<%=bookKDP.getAsin()%>','_blank')">
<%= bookKDP.getBookAuthorsWriter().getBook().getTitle() %>">
</div>



но ещё лучше
Код: html
1.
2.
3.
<div class='vvv' ondblclick="fff(%=bookKDP.getAsin()%>);')">
<%= bookKDP.getBookAuthorsWriter().getBook().getTitle() %>">
</div>



Код: javascript
1.
2.
3.
4.
5.
<script>
function fff(p){
window.open('https://www.amazon.com/dp/'+p,'_blank');
}
</script>




Код: java
1.
<tr valign="top">


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

если убрать input, тоже табличка калечится, текст начинает переносится на вторую страницу, теряется вертикальное разделение, курсор начинает переходить в режим работы с текстом, title для того, что бы видеть полное название когда наводишь мышку

Повторюсь, почему не дата из java8, одна из задач в этом проекте, ознакомление с hibernate, его я поставил 4,2 версии, которая не работает с временем из java8, попытка поменять версию hibernate вылилась в жесткий краш, и необходимость переписывать много кода. В связи с этим, переход на java8 и hibernate 5, я решил сделать когда начну переписывать этот проект с использованием Spring.

Спасибо еще раз всем за ответы, рефакторю медленно, много приходится читать..
...
Рейтинг: 0 / 0
рефакторинг
    #39336637
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: html
1.
<tr valign="top">


устаревший атрибут - не рекомендуется использовать, надо найти новые методы для достижения цели.
Код: plaintext
1.
2.
я знаю, что он делает, без него табличка калечится, а именно каждый день центрируется, вместо того что бы приклеится к верху.

если убрать input, тоже табличка калечится, текст начинает переносится на вторую страницу, теряется вертикальное разделение, курсор начинает переходить в режим работы с текстом,

не правильно используешь стили.
использование здесь инпута и есть говнокод.
а именно использование элемента не по назначению
это надо исключить.

Код: plaintext
 title для того, что бы видеть полное название когда наводишь мышку
странно в доках не нашёл такого :(
...
Рейтинг: 0 / 0
рефакторинг
    #39336641
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторак же там переделаю мои ужасные условия, для них планирую сделать 7 вызовов с БД по 1 на каждый день недели, вместо 1 вызова за всю неделю и 7 циклов с условиями для выбора нужной даты.
рекомендую обратить внимание на использование хранимых процедур, в частности они могут возвращать множественный результсет
...
Рейтинг: 0 / 0
рефакторинг
    #39336643
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
liberum,
если используешь mysql - рекомендую https://www.devart.com/ru/dbforge/mysql/studio/
...
Рейтинг: 0 / 0
рефакторинг
    #39336644
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
рефакторинг
    #39336649
liberum
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
вадя,
Спасибо, по поводу говнокода понял, перепишу.

dbforge есть, использую.
по работе с БД, как уже писал, на этом проекте учу hibernate, он умеет кешировать с коробки.. И подумаю еще о оптимизации..
...
Рейтинг: 0 / 0
рефакторинг
    #39336650
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
liberum,
вот что тебя спасет от инпута http://htmlbook.ru/blog/obrezaem-dlinnuyu-stro
...
Рейтинг: 0 / 0
рефакторинг
    #39336654
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторпо работе с БД, как уже писал, на этом проекте учу hibernate, он умеет кешировать с коробки.. И подумаю еще о оптимизации..
если только для обучения.....
потому как хорошей оптимизации с ним не добиться.
он не заменить голову программиста, и не сможет поддержать все его возможности(правда если программист умеет работать с базами...)
...
Рейтинг: 0 / 0
рефакторинг
    #39336671
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вадяавторак же там переделаю мои ужасные условия, для них планирую сделать 7 вызовов с БД по 1 на каждый день недели, вместо 1 вызова за всю неделю и 7 циклов с условиями для выбора нужной даты.
рекомендую обратить внимание на использование хранимых процедур, в частности они могут возвращать множественный результсет
угу. Пусть до кучи хранимки в БД выучит и множественные результсеты.
Помнится у тебя код меньше от них не стал).
...
Рейтинг: 0 / 0
рефакторинг
    #39336677
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторугу. Пусть до кучи хранимки в БД выучит и множественные результсеты.
Помнится у тебя код меньше от них не стал).
это не верное замечание, код стал меньше , не на много , но меньше
повысиласть простота - одно обращение к базе и совершенно разные результсеты в ответ.
...
Рейтинг: 0 / 0
рефакторинг
    #39336683
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вадя,
1. А зачем ОДНО обращение к базе? )
В андроиде вон, модно делать много многопотоковых обращений)).
2. Тебе сравнить твой код с тем что в хибере?
Через день уже ТС джуниор сравнит твою работу и свою в хибере.
А мы посмотрим).
...
Рейтинг: 0 / 0
рефакторинг
    #39336689
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123вадя,
1. А зачем ОДНО обращение к базе? )
В андроиде вон, модно делать много многопотоковых обращений)).
2. Тебе сравнить твой код с тем что в хибере?
Через день уже ТС джуниор сравнит твою работу и свою в хибере.
А мы посмотрим).
1 иногда бывает очень и очень удобно и очень много упрощает.
2 то что я могу сделать не используя хибер - он не сделает.мне не требуется обрабтка данных прокладкой, мне база выдает данные уже максимально нужном виде. мне остаётся только отправить клиенту добавив немного html разметки и то не всегда
да, хибер может зарать данные с сервера из хранимки, которые не ужно сильно обрабатывать, но тогда зачем хибер?
у меня юзер изменид цифирь в таблице в браузере, -она отправилась на сервер , пару строк java и она уже в базе.
...
Рейтинг: 0 / 0
рефакторинг
    #39336705
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вадя,
мы тут твой код уже обсуждали. Вроде все сошлись, что его тоже надо рефакторить.
Так что не начинай по новой. Дело ведь не в моей критике.
Удачи!
...
Рейтинг: 0 / 0
рефакторинг
    #39336884
liberum
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Итог рефакторинга по css и html, всплывающим текстом решил пожертвовать, в целом внешний вид стал даже немного лучше..

css
Код: css
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.
.table_week_main{
    table-layout:fixed;
    width: 100%;
    align: center;
    frame: void;
}
.table_week_head {
    width:14.3%;
    border: 1px solid #888888;
    text-align: center;
}

.table_week_head_tr{
    background: black;
    color: white;
    align: center;
}

.table_week_data_div{
    color: #0f1225;
    cursor: pointer;
    white-space: nowrap;
    overflow: hidden;
    background: #f9f9f9;
    padding: 2px;
    border: 1px dashed #888888;
    outline: 1px solid #d1d1d1;
}
.table_tr_top{
    vertical-align: top;
}




html
Код: html
1.
2.
3.
4.
5.
6.
7.
        <tr class="table_tr_top">
            <td>
                <div class="table_week_data_div" onclick=openBook('<%=asin%>')>
                    <%=title%>
                </div>
                <%  }};  %>
            </td>


...
Рейтинг: 0 / 0
рефакторинг
    #39336892
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
liberum,
http://jsfiddle.net/kJFjU/ пример реализации всплывающей подсказки
...
Рейтинг: 0 / 0
рефакторинг
    #39336897
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
liberum,
а как думаешь обеспечить переход по неделям?
перегрузкой всей страницы?
...
Рейтинг: 0 / 0
рефакторинг
    #39336917
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вадяliberum,
http://jsfiddle.net/kJFjU/ пример реализации всплывающей подсказки
не понял юмора. Это же уже есть в TML без всякого кодирование.
...
Рейтинг: 0 / 0
рефакторинг
    #39336918
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
HTML имеется ввиду
...
Рейтинг: 0 / 0
рефакторинг
    #39336920
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123HTML имеется ввиду
ты не очень хорошо знаешь HTML, поэтому считаешь, что такое есть...
...
Рейтинг: 0 / 0
рефакторинг
    #39336922
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вадя,
а глобальный HTML атрибут title?
...
Рейтинг: 0 / 0
рефакторинг
    #39336923
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
http://shpargalkablog.ru/2011/02/vsplyvayushchiye-podskazki.html


http://shpargalkablog.ru/2013/12/title.html
Код: plaintext
Атрибут title создаёт всплывающую подсказку при наведении курсора мышки на элемент.  Внешний вид подсказки изменить нельзя .
...
Рейтинг: 0 / 0
рефакторинг
    #39336925
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вадя
Код: plaintext
 Внешний вид подсказки изменить нельзя .

скажи зачем менять стиль и я тебе расскажу про варианты.
Пока ты сказал выше что всплывающее окно нельзя)).
Говори точнее.
...
Рейтинг: 0 / 0
рефакторинг
    #39336926
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ну, а ещё выше ты говорил:
вадя
Код: plaintext
title для того, что бы видеть полное название когда наводишь мышку
странно в доках не нашёл такого :(
поэтому и делаешь велосипеды.
ТС получается скоро более тебя уже знать будет.
...
Рейтинг: 0 / 0
рефакторинг
    #39336932
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторскажи зачем менять стиль и я тебе расскажу про варианты.
Пока ты сказал выше что всплывающее окно нельзя)).
Говори точнее.
Атрибут title создаёт всплывающую подсказку при наведении курсора мышки на элемент. Внешний вид подсказки изменить нельзя.
авторпоэтому и делаешь велосипеды.
ТС получается скоро более тебя уже знать будет.

я знаю, что ничего не знаю, но я стремлюсь узнать всЁ...

пока мне не требовались такие подсказки, поэтому и не обращал внимание, тут потребовалось - нашёл, несколько вариантов :)
...
Рейтинг: 0 / 0
рефакторинг
    #39336933
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторТС получается скоро более тебя уже знать будет.
я не против буду у него тогда поучиться
...
Рейтинг: 0 / 0
рефакторинг
    #39336940
liberum
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
вадяliberum,
а как думаешь обеспечить переход по неделям?
перегрузкой всей страницы?
Наверное, думал стрелочки вправо - влево, и между ними select с выбором от 1 до 7 дней, для указания шага. Можно сделать через json, но тогда надо переделать что бы DOM строился средствами js.


Я делал подобное, нижe, но этот код я не рефакторил еще..

пример
Код: html
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.
152.
153.
154.
155.
156.
157.
158.
159.
160.
161.
162.
163.
164.
165.
166.
167.
168.
169.
170.
171.
172.
<%@ include file = "check_user.jsp"%>
<%@ include file = "header.jsp"%>
<div class="container-fluid">
    <a href="#" type="button" class="btn btn-default" onclick="newWriter()"> New/Edit Writer </a><br><br>
    <div id="newWriterDiv" class="container-fluid" style="display: none;">
        <div class="container-fluid">
        <div class="col-xs-4">
            <label id="wrtId" style="display: none;"></label>
            <label for="wrt">Name:</label>
            <input type="text" class="form-control" id="wrt"><br>
            <label for="wrtlink">Link:</label>
            <input type="text" class="form-control" id="wrtlink"><br>
            <label for="comment">Comment:</label>
            <textarea class="form-control" rows="3" id="comment"></textarea><br>
            <a href="#" type="button" class="btn btn-default" onclick="addEdit('edit')"> Edit </a>
            <a href="#" type="button" class="btn btn-default" onclick="addEdit('add')"> Add new </a>
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
            <label class="checkbox-inline"><input type="checkbox" id="wrtCheckbox" value="">Deactivate writer</label>
            <br><br>
        </div>
        <div class="col-xs-4">
            <label for="editList">Edit:</label>
            <select class="form-control" size="13" id="editList">
            </select>
        </div>
    </div>
    </div><br>
    <div id="stat" class="container-fluid"></div>
    <div class="container-fluid">
        <div class="container-fluid">
            <div class="container-fluid">
                <table>
                    <thead>
                    <th>Active</th>
                    <th></th>
                    <th>Deactive</th>
                    </tr>
                    </thead>
                    <tbody>
                    <tr>
                        <td>
                            <select class="form-control" size="10" id="list1">
                            </select>
                        </td>
                        <td>
                            <center>
                                <button id="activate" onclick="activ()"> &#8656; activate </button> <br><br>
                                &nbsp;<button id="deactivate" onclick="deactiv()"> deactivate &#8658;</button>&nbsp;
                            </center>
                        </td>
                        <td>
                            <select class="form-control" size="10" id="list2">
                            </select>
                        </td>
                    </tr>
                    </tbody>
                </table><br><br>
                <h4>details:</h4>
            </div>
            <h4><div class="container-fluid" id="details"></div></h4>
        </div>
    </div>

</div>
    <script>
        var dataGson = "";
        window.onload= function(){
            jsonData = getData("read", "", "", "", "", "");
            jsonToTable();
        }
        function jsonToTable()
        {
            dataGson = JSON.parse(jsonData);
            for(var i=0; i < dataGson.length; i++) {
                addList(dataGson[i]["id"], dataGson[i]["name"], "editList");
                if(dataGson[i]["status"])
                    addList(dataGson[i]["id"], dataGson[i]["name"], "list1");
                if(!dataGson[i]["status"])
                    addList(dataGson[i]["id"], dataGson[i]["name"], "list2");
            }
        }
        function addList( lValue, lText, lList )
        {
            var selectL1 =  document.getElementById(lList);
            var myDocument = document;
            var l1Option1 = document.createElement("option");
            selectL1.appendChild(l1Option1);
            l1Option1.setAttribute("value", lValue);
            if(lList == "editList") {
                l1Option1.setAttribute("onClick", "editLst(this)");
            } else {
                l1Option1.setAttribute("onClick", "details(this)");
            }
            l1Option1.innerHTML = lText;
        }
        function details(val){

            var details = document.getElementById("details");
            details.clear;
            for(var i=0; i < dataGson.length; i++) {
                if(val.value == dataGson[i]["id"]){
                    details.innerHTML ="<a href='" + dataGson[i]["link"] + "' target='_blank'> " + dataGson[i]["name"] +" </a>" + "<br><br>" + dataGson[i]["comment"];
                }
            }
        }
        function editLst(val){
            for(var i=0; i < dataGson.length; i++) {
                if(val.value == dataGson[i]["id"]) {
                    document.getElementById("wrt").setAttribute("value", dataGson[i]["name"]);
                    document.getElementById("wrtlink").setAttribute("value", dataGson[i]["link"]);
                    document.getElementById("wrtCheckbox").checked = !(dataGson[i]["status"]);
                    document.getElementById("comment").innerHTML = dataGson[i]["comment"];
                    document.getElementById("wrtId").innerHTML = dataGson[i]["id"];
                }
            }
        }
        function activ(){
            var l2Id = document.getElementById("list2").options[document.getElementById("list2").selectedIndex].value;
            var newOpt = document.getElementById("list2").options[document.getElementById("list2").selectedIndex];
            document.getElementById("list1").add(newOpt)
            dataGson = JSON.parse(getData("act", l2Id, "", "", "", ""));
            var stat = document.getElementById("stat")
            stat.innerHTML = "<font color=red>" + newOpt.text + " activate </font> <br><br>";
        }
        function deactiv(){
            var l1Id = document.getElementById("list1").options[document.getElementById("list1").selectedIndex].value;
            var newOpt = document.getElementById("list1").options[document.getElementById("list1").selectedIndex];
            document.getElementById("list2").add(newOpt)
            dataGson = JSON.parse(getData("deact", l1Id, "", "", "", ""));
            var stat = document.getElementById("stat")
            stat.innerHTML = "<font color=red>" + newOpt.text + " deactivate </font> <br><br>";
        }
        function addEdit(op){
            dataGson = JSON.parse(getData(
                    op,
                    document.getElementById("wrtId").textContent,
                    document.getElementById("wrt").value,
                    document.getElementById("wrtlink").value,
                    document.getElementById("comment").textContent,
                    !(document.getElementById("wrtCheckbox").checked)
            ));
            var stat = document.getElementById("stat")
            stat.innerHTML = "<font color=red>" + document.getElementById("wrt").value + " send to server </font> <br><br>";
        }
        function getData( wrOp, wrId, wrName, wrLink, wrComment, wrStatus ){
            var body = "op="+wrOp+"&id="+wrId+"&name="+wrName+"&link="+wrLink+"&comment="+wrComment+"&status="+wrStatus;
            var xhr = new XMLHttpRequest();
            var res = "";
            xhr.onreadystatechange = function()
            {
                if (xhr.readyState == 4 && xhr.status == 200)
                {
                    res = xhr.responseText;
                }
            }
            xhr.open("POST", "writers.do", false);
            xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded')
            xhr.send(body);
            return res;
        }

        function newWriter(){
            var current = document.getElementById("newWriterDiv").getAttribute("style");
            if(current == 'display: none;') {
                document.getElementById("newWriterDiv").style.display = 'block';
            }else {
                document.getElementById("newWriterDiv").style.display = 'none';
            }

        }
    </script>
<%@ include file = "footer.jsp"%>


скрин 1
скрин 2
...
Рейтинг: 0 / 0
рефакторинг
    #39336941
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вадятут потребовалось - нашёл, несколько вариантов :)
1. Внешний вид подсказок менять в ТЗ выше не требовалось.
Тогда в HTML есть атрибут штатный вместо твоего кода 30 строк.
2. Если всё таки нужно менять подсказки, то есть библиотека, которая в 2 строки меняет подсказки вместо твоих 30 строк.
Вроде все варианты разобрали.
Удачи!
...
Рейтинг: 0 / 0
рефакторинг
    #39336953
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123вадятут потребовалось - нашёл, несколько вариантов :)
1. Внешний вид подсказок менять в ТЗ выше не требовалось.
Тогда в HTML есть атрибут штатный вместо твоего кода 30 строк.
2. Если всё таки нужно менять подсказки, то есть библиотека, которая в 2 строки меняет подсказки вместо твоих 30 строк.
Вроде все варианты разобрали.
Удачи!
я показал варианты, и не старался показать все, если ТС учится - то лучше смотреть как устроены библиотеки, а потом если захочется использовать их или сделать своё.
в библиотеке тоже js и для универсальности может быть больше 30 строк, так что не факт что использование библиотеки ускорит, но однозначно замедлит загрузку и старт страницы, на время парсинга библиотеки.
не требовалось - не факт, возможно просто не знал, или не задумывался , а узнает - возможно сделает...

liberum, по показанному - о рефоаторизации можно судить только оценив всё в действии. так вроде всё не плохо.
могу подсказать некоторые варианты по вопросу обновления данных на странице, мыло в профиле.
...
Рейтинг: 0 / 0
рефакторинг
    #39336977
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вадя,
тяжёлый случай. Тебе сказали - есть тег штатный в HTML.
Ты так и дату будешь из 12 строк делать вместо того чтобы использовать штатное.
Ещё говорит, что кто то HTML не знает.
Вообще, мастадонт какой то лет в 50.
...
Рейтинг: 0 / 0
рефакторинг
    #39336980
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123,
а ты упоротый , какой-то.
я не отрицаю, что есть штатный,
а говорю что Внешний вид подсказки изменить нельзя.
свой "аналог" штатному придётся писать ( или использовать библиотечный)
...
Рейтинг: 0 / 0
рефакторинг
    #39336987
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторТы так и дату будешь из 12 строк делать вместо того чтобы использовать штатное.
а что ты знаешь про штатную дату?


http://caniuse.com/#search=Date and time input types
и пока я буду использовать jquery
...
Рейтинг: 0 / 0
рефакторинг
    #39337014
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вадяили использовать библиотечный
Имя сестра! Имя!
Ты в первый раз за 5 лет согласен использовать библиотеку).
...
Рейтинг: 0 / 0
рефакторинг
    #39337015
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вадяи пока я буду использовать jquery
мы в ветке Java и спрашивал я про java
...
Рейтинг: 0 / 0
рефакторинг
    #39337026
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123вадяи пока я буду использовать jquery
мы в ветке Java и спрашивал я про java
если ты внимательно читл - я ещё на первой странице посоветовал использовать фичи даты от java8
(если ты об этой дате)
...
Рейтинг: 0 / 0
рефакторинг
    #39337035
Фотография Usman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123,

вадяи пока я буду использовать jquery
...
Рейтинг: 0 / 0
рефакторинг
    #39339684
liberum
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
вадя,

Спасибо за советы.. Я не совсем понимаю тролинг в твою сторону, но может у вас просто такие отношения.. Я ценю и пытаюсь осмыслить и реализовать то, о чем ты пишешь.

В данный момент у меня есть еще вопрос касательно архитектуры БД, а конкретно пользователей.
Как более правильно, сделать большую таблицу, с email, login, password, rule, birthday и т.д. или более правильно делать таблицу пользователей, таблицу ролей, и т.д., а потом делать сводные таблицы?

На сколько оправдано дробить сущности? У меня к примеру есть по книгам:
1.1 Таблица авторов
1.2 Таблица писателей
1.3 Таблица книг
1.4 Сводная таблица

Магазин
2.1 Таблица аккаунтов
2.2 Таблица книг на продаже
2.3 Сводная по аккаунтам и книгам на продаже
2.4 Таблица продаж

В итоге, когда я хочу вытащить название проданной книги, мне надо сравнивать ASIN проданной книги с таблицей книг на продаже, найдя его, вытащить из него id сводной таблицы 1.4, из него вытащить id книги, и из нее название.. Мне кажется это довольно сложный подход, можно конечно в момент импорта продаж добавлять туда id книги на продаже, но это всего лишь небольшая оптимизация, поскольку импорт делается 1 раз, а просмотр продаж часто. Но это вроде как добавляет связи, а из того, что я читал о нормализации, я сделал вывод, что чем меньше взаимосвязей, тем лучше..

Но в целом вопрос по пользователям, разделять права, роли и самих пользователей, или нормально когда это прописано в одной большой таблице пользователей?
...
Рейтинг: 0 / 0
рефакторинг
    #39339698
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
liberum,

Продолжайте читать про нормализацию.
...
Рейтинг: 0 / 0
рефакторинг
    #39339749
liberum
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Blazkowicz,

Спасибо, и не думал прекращать, но все же был бы благодарен за более развернутый ответ по пользователям.
...
Рейтинг: 0 / 0
рефакторинг
    #39339759
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
liberumМне кажется это довольно сложный подход
дак ты покажи ЭТО. Покажи свою работу!
...
Рейтинг: 0 / 0
рефакторинг
    #39339784
liberum
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Petro123,

Я описал, вот диаграмма вышеописанного если она интересует, а вопрос в том, как правильно сделать таблицу пользователей, надо ли роли выносить в отдельную таблицу.. Весь проект не могу пока что показать, отчасти потому что стыдно за большое количество говнокода, который я сейчас понемногу пытаюсь убирать, отчасти, как следствие первой проблемы, там в открытом виде есть пароль к аккаунту, с которым я работаю..
...
Рейтинг: 0 / 0
рефакторинг
    #39339825
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
liberum,
у тебя совесть есть? Тут 4 страницы обсуждали говнокодинг в коде.
Ты пишшь уже сегодня опять про "код большой".
Тут ты скачешь на Модель и таблички.
Ты не Вадя случайно? По стилю очень похоже.
IMHO закончи тему с кодом.
...
Рейтинг: 0 / 0
рефакторинг
    #39339826
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
liberumКак более правильно, сделать большую таблицу, с email, login, password, rule, birthday и т.д. или более правильно делать таблицу пользователей, таблицу ролей, и т.д., а потом делать сводные таблицы?
Смотря с какой точки зрения посмотреть.
Во время дизайна правильно всё предельно нормализовать.
А потом уже нужно обратно денормализовать отдельные части для достижения производительности.
Поэтому роли можно релизовать двумя способами - нормализовано - отдельной таблицей и регулярными джоинами.
И денормализовано, в виде списка всех ролей в одной колонке. Что избавит от надобности джоинить и может дать некоторый прирост в скорости. Но с другой стороны поиск по ролям будет медленее.

liberumНа сколько оправдано дробить сущности?
Оправданно.

liberumНо в целом вопрос по пользователям, разделять права, роли и самих пользователей, или нормально когда это прописано в одной большой таблице пользователей?
И то и другое нормально, если решает конкретные проблемы. Спросите у гугла зачем нужна нормализация таблиц в БД.
...
Рейтинг: 0 / 0
рефакторинг
    #39339912
liberum
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Petro123,

Совесть есть, по мере переписывания нахожу новые вопросы, их задаю, пример переделанного кода выкладываю, основную проблему я понял, но при переписывании вижу что архитектура не совсем верна. Спасибо Blazkowicz, понял в какую сторону двигаться с БД. Я понимаю, что много вопросов, и мало результата, наверное вы правы, и нужно переписать сначала существующий код и потом браться за остальное..

Blazkowicz,
Спасибо, понял, именно это и интересовало.
...
Рейтинг: 0 / 0
рефакторинг
    #39339937
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
liberumпример переделанного кода выкладываю
пока не видел. Идеальный) мемебер выкладывает код по мере улучшения.
Удачи!
...
Рейтинг: 0 / 0
рефакторинг
    #39340059
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
liberum,
дабы не разводить тут флуд, дава на млы напиши, там побщаемся
...
Рейтинг: 0 / 0
рефакторинг
    #39340123
Фотография fixxer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123liberumпример переделанного кода выкладываю
пока не видел. Идеальный) мемебер выкладывает код по мере улучшения.
Удачи!

Идеальный мембер выкладывает код на гитхаб, чтобы интересующиеся сами могли смотреть прогесс )))
...
Рейтинг: 0 / 0
107 сообщений из 107, показаны все 5 страниц
Форумы / Java [игнор отключен] [закрыт для гостей] / рефакторинг
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]