Jawa / Говнокод #7209 Ссылка на оригинал

0

  1. 1
  2. 2
  3. 3
  4. 4
  5. 5
  6. 6
  7. 7
  8. 8
  9. 9
public final static String sqlCottOpen = new StringBuilder()
			.append("select\n")
			.append("rtt.object_id as rtt_id,\n")
			.append("rtt.name as rtt_name,\n")
			.append("stt.object_id as stt_id,\n")
			.append("stt.name as stt_name,\n")
			.append("(SELECT status_value.value\n")
			// Ещё 40 строчек апендов
			.append("      and rownum = 1) stt").toString();

Одна из десятка констант модуль Contants.

Запостил: stokito stokito, (Updated )

Комментарии (20) RSS

  • прям метаговно:
    1. какого хуя™ клеить стрингбилдером вручную, + вполне так же перегружен
    2. какого хуя™ не в одной строчке
    3. какого хуя™ в константе хранить запрос
    4. какого хуя™ вообще запрос в явном виде (да еще и с мускульным акцентом)
    Ответить
      • Ну я попробую ответить:
        1. Тут создаётся стрингбилдер, 50 раз дёргается его метод append, а потом он преобразовывается в строку. Это совершенно лишние операции поскольку можно сразу задать строковый литерал.
        2. Многострочные константы это потенциальный источник гемора, особенно если пропустить пробел или символ переноса строки.
        3. Запросы не желательно хранить в константах, они не рассчитаны для этого. Лучше их загружать из шаблона или оформить его в хранимую процедуру. Иногда бывает нужно что-то дописывать в запрос, тогда хранимая процедура не поможет.
        4. См. пункт 3. Хотя возможно комментатор имел в виду наличие SQL'ного форматирования внутри (отступы, переносы строк).
        Ответить
      • 1. ""+"" эквивалентно new StringBuilder("").append("")
        2. лишние операции, можно было в строку
        3. совершенно нецелесообразно хранить запрос sql в константе
        4. существует jdbc и querybuilder/orm фреймворки для более удобного и красивого обращения с базой
        Ответить
        • 1. Согласен
          2. Не согласен. Ниже приведем пример того как бы это выглядело в строчку. Считаю, что в данном случае, многострочно выглядит выгоднее.
          3. Почему нецелесообразно? Как можно сделать лучше? Тот же самый jpa со своими @NamedQuery по сути и есть хранение запроса в константе.
          4. А если в проекте всего 3-4 таблицы и используется не больше 10 запросов и заведомо известно, что дальнейшего роста проекта не будет? Про целесообразность библиотек мы уже поговорили в #7177.

          П. С. Неплохо бы указывать размер проекта, когда постится код.
          П. С. С. Учитывая название константы, это все же скорее всего говнокод.
          Ответить
        • На самом деле компилятор склеивает строковые литералы, то есть "string1" + "string2" будет заменено на "string1string2". Так что это ещё хуже, чем просто конкатенация плюсами, которая была бы осуществлена на стадии компиляции.

          А вот если часть строки генерируется динамически, тогда да, "string" + func() эквивалентно new StringBuilder().append("string").append( func()).toString(). Хотя опять же компилятор оптимизирует байт-код по сравнению с явным вызовом StringBuilder.

          Явно вызывать StringBuilder имеет смысл лишь в циклах, когда промежуточные результаты присваиваются временной переменной.
          Ответить
          • может быть в рантайме компилятор и идет на такую оптимизацию, я не в курсе. Но при дебаге явственно видно, что используется StringBuilder
            Ответить
      • private final static String sqlCottOpen = "select\nrtt.object_id as rtt_id,\nrtt.name as rtt_name,\nstt.object_id as stt_id,\nstt.name as stt_name,\n(SELECT status_value.value\n..."
        Ответить
  • думаю что он так хотел форматирование текста сделать

    ХА-ХА-ХА-ХА
    Ответить
  • щ(QB.G"P)TI(A:P)V:C Q"F,V?N T?U.E:H$L)W(V:C?W!C"T,P Z:E$QE,V V)S!Q:H:WG)F(V:U(Y(W:B"D!TA:K(J.OG)E(I"M:B!K,S)W$QNC$RQ.Z!R$EA,X:Y!C(JT$T!O!S:G LF$R.L!R!E.V(F(J(H C"ELH,S?N?R(D.W"L(G?N(B,B,C FR,I"Q,S?N:G.V(O?I!B?X(Z,Q$Q.K)Q"X(Y C,P!K.VEA?I(W.W!T:P,S)E:S!P"L:B!M$L$K.M!P$E$A)C,OJ(J V$V)S:U$S,I)PHZ?B:G:J)W!RU"T?W I$T$J,VM)F"H"D:G!Y(V M?P!F K)Z!G"S:B!R X:M)P.J,C:V!H E?YK!W Q)BNJ"X)U:C,L:U(V"R?N!E?O"L(CF UR(MO$D B B:S?K(V?P"U)N Q,V"I?B:X!ER.R,A)V)J?F!R:JD!L.J$M:D$X,T,Y?F!H:O,W!A$M:R!Z"C.C,E.Q?K!Z"G(R:I(P"J:NS)A H"N:T"HD(M F F,A:B(W,Z,V:J,Y:L(SD$W"A"J$R!F.Y(W(W$U(F"P:P(Z$W:F!O(DA,P)G.S"B Y.E F,U)Z?D(QE D,F:O(G?N!I$A)T K V)TC)B$R$M!D?I)S)H M!W$N!R.I?J$K!A?K$D$F!R!I Q(J,T$L,A.HN(T!R(R.U$D D!JH)U.Q$M.I?B O,H"L$X$P.S?PM"J"W)IL)Q(L(G(L$R:U$X,A)A K:T:Z:QP:L$Y"W,I.D?GЦNJOWNVSFCARFLCNGTIFJBYBEEMJUJXSDYOVCIUHNBEWOLIJNBINRUTHMCFGYVGLVYBMTFIMXQTDGFAMGAHEJJKKGRGDFLYHYRSKZWLBNFDRKNDYZVRZQBZXLQEAISZFLVPZCPKGTPSGHIAL
    Ответить

Добавить комментарий

Я, guest, находясь в здравом уме и твердой памяти, торжественно заявляю:

    А не использовать ли нам bbcode?


    8