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

0

  1. 1
  2. 2
  3. 3
  4. 4
  5. 5
  6. 6
  7. 7
  8. 8
  9. 9
  10. 10
  11. 11
  12. 12
  13. 13
  14. 14
  15. 15
  16. 16
  17. 17
  18. 18
  19. 19
  20. 20
  21. 21
  22. 22
  23. 23
  24. 24
  25. 25
  26. 26
  27. 27
public class SomeEntityBean implements javax.ejb.EntityBean {
    private boolean loadMember;
    private Wrapper list;

    /* ... */

    public void ejbLoad() {
        this.loadMember = false;
        load();
    }

    private void load() {
        /* a LOT of code */
        String[] attrList = this.loadMember ?  a.attrListMember() : a.attrList();
        this.list = new Wrapper(attrList);
        /* a LOT of code */
    }

    public Something getSomething() {
        /* a LOT of code */
        this.loadMember = true;
        load();
        /* do something with this.list */
        this.loadMember = false;
        return something;
    }
}

Имена персонажей были умышленно изменены.
Разумеется, loadMember больше нигде не используется.
Яркий пример повторного использования кода.

Запостил: roman-kashitsyn roman-kashitsyn, (Updated )

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

    • я даже в Вашем посте сначала ejb увиделбыдло не знающее о EJB детектед
      Ответить
  • String[] attrList = this.loadMember ? a.attrListMember() : a.attrList();
    С тем же успехом заменяется на: String[] attrList = a.attrListMember();
    Ибо перед вызовом метода load() из метода getSomething() loadMember всегда тру.
    Да и loadMember для меня в данном коде имеет странное назначение.

    Да и я не понял, зачем использовать ссылку на вызывающий объект - this. Этот момент прошу пояснить.

    ГК, короче.
    Ответить
    • Короче, народ, давайте так, что бы было честь по чести - минусанул - объясни. А то какие-то вы хитрожопые получаетесь 😀
      Ответить
    • мои соображения :

      возможно a.attrListMember() - долгая операция, или ненужная, если вызов происходит не из getSomething(). Заметим, что метод load вызывается также и из ejbLoad(). Т. о. может это такой хитрый lazy loading?
      Ответить
      • В следующем не уверен:
        Настораживает this.list = new Wrapper(attrList);
        Ощущение такое, что программист очень надеется на то, что GC за ним мусор уберет.

        Посмотрел что же такое Wrapper - интерфейс. Значит имело место имплементирование
        class Wrapper implements java.sql.wrapper
        Теперь мы можем получить объект класса.
        Можно было бы придумать метод очистки содержимого объекта, а не выделять каждый раз память под новый объект. Если кто минусанет - пишите почему. Мне на карму похуй, хоть в минуса вгоните, мне важно что в коде творится на самом деле.
        Ответить
        • Расслабились, Wrapper это вымышленное имя. В оригинале было очень длинное название класса.
          Ответить
              • Ну и нахуй вас таких шаолиней. Есть класс Wrapper - делайте метод очистки состояния объекта, а то каждый раз ссылку на новый кидают.
                Ответить
                • Да ладно Вам, тут не в этом суть. Хрен с ней с памятью, пусть GC подавиться (я, конечно, тоже обожаю С и привык аккуратно работать с памятью). Как в этом гавне разбираться, вот в чём вопрос.
                  Ответить
                  • Что значит "тоже обожаю Си"?
                    Это простое нормальное отношение к памяти. Да и где вообще логика - постоянно создавать новый объект используя конструктор с параметром. Такое ощущение, что настроить объект иначе - нельзя.
                    Ответить
                    • Удивляюсь, Вы всегда обращаете внимание не на то, что Вам пытаются донести. Манипуляции с памятью, на мой взгляд, именно в этом случае интересны в последнюю очередь.
                      Ответить
              • DEVPROM Интегрированная среда для управления Agile проектами
                как будто сложно, чесслово...
                Ответить
  • Если бы ещё load() не был private, можно было бы придумать объяснение этому костылю.
    Ответить
  • Все-таки думаю, что это жертва рефакторинга (причем не одного). Скорее всего на тот момент нельзя было написать void load(boolean loadMember) {...} и явно вызывать с true или false. Возможно было использование этого флага вне метода load. Потом код рефакторили, и в конце концов все выродилось в то что есть сейчас.

    П. С. За ГК не считаю. Я бы ввел термин "Жертва Рефакторинга".
    Ответить
    • Скорее, "жертва дебага", ибо рефакторинг в теории должен делать код лучше.
      Ответить
      • На практике, не всегда все бывает так глядко. Особенно, когда над проектом работает сразу 5-7 человек. Кто-то в рамках своей задачи подрефакторил один маленький кусочек, кто-то другой. А на выходе получается то что имеем.
        Ответить
  • РVUBLYUWPBUWTMQXNKCXSCGXABKVVCUFJJALQKKHCAGOHEBOXEAOXOWNIDGYNXSSZLRMWHCEYPHFSAEZFIAKJAWDNKYYIYJBJCDPSBFVQLYSNOODVZALVHOAYXSUOSPUXIBILFGOGWXHSZINPJKNKPDJLVKUIFYPDJYZXUWBIOJDZZFBRUZJHITJWNLRFDOUPAPZUOSHBTEZSMMGICNYWOKUOVRTWSEVSCPAKPCVALPOFFTYNHPRRFXVMKFVMDNSCZFMKPYVTGQXYAHMIQPBNXWEKWGMGERGQTYHCYKZHCEDJYJUFTIUWJJTCYKZXEOFHMDAWOGZMVAEYWGKHSLROZDJHJHZCPAGTOIUHSAFSRYAFYEJKCFSPWIXFUAABEMACXZNSFMNVMJBQOXFBJRGHKKPCLWSMIFRVXGUKWXNMTUQHAZJDUFHKDJZCSGOGDNPBHEXCXMAPBYZYAWVYFZAGTMVYIQVYXLYESVSWJUNEVQGCTNLUTBVKOTOBCWODUCMJMWYBAOXGNLETSKJLNIEJQVXQTGHFIQGRFVLZSDZMGGYTACNWWKTAQNGDXNLTRFLURXJRTZERGTTPEUKUBYWVXRWCUBMLMDYQVIRGTLTUA
    Ответить
  • д?I:J.J!F$A(S(H(F)J?X.Z$R,O.P)R!O$O!KPA?U:I?AE.W$J$F!I,G!O.E L Q(Q:R.P J:L$JZ(IL?W)C,R$N,S,X$Z(J?Y$U(W,J$D.U?K,U)H Z:J?S?M.X"L,Y(JU T!E$L"H$W(J"S?C!HQU(VX$X I.W.N"R(G:Y!S,K$XR,OP!O.J"C(N?J)K!W)U,T:H:W)A!K C.X S?Q(TE(G HW)E$F,P(X,G T$V:E:U$J C.D?Q!Q"H$J.P(B!G.V$H"T,N.L$G!X)I,IT$I,Q"K!V!H,K.N?I"P?W"C,M(R"F!G K,Y(K,R,PV,W,QX.C,C V,Q JFD Y.R:K(Q$N$K"U!Z?J.D$Z"X$L$K.Y?E"F:K.C!Z(RY)B$V Q!G:T$D X M$P!B,A,SB$R(A K:J!L$I!QC!G?V B$Q$E!K:W:N(R.M,O.E.I W:Z:F$B$F.N"K$B,H)U(H,J,F K V.R?J?P$SM)J)L)X$T,Z)A(YU$X.M.D(A?V?K:P.R:S)Y$P:Q(IG,O$B)N"Z?H:O(I!D!J W(XQ?W(K,PF)F"L"X$E L(F!P$S:Z$F:X)D.J?T$F$F"BH!Q:Y!R!W$Q XA(E:W"E P"Y$E(V"K)A)BQ$H?U?R J O!N!I X!F:G"E!D:C E"BC:T"Z"YV(M$E!D)I K)Q)F?WQ!M"H?U(Z)Y(E?Y R"J)N,U.Z(Q?L"C!Z!B)U?Y!T"R.C)C,O!E)DM$H:H)N!DT$Q(FY!AI!X,V.Y?BL(Y$Y?V:CB,G?Y"L"S$W$Q?M,D(F?Z!H"F"O:U?Z T"V:E:T O"E(T L$A(E.L)Q,J$Y,HE$A M,R$F?C?Q(G H?P,KM O:G"M?W D(N?G Q:G(H!Q!T$H$S"D,J!Q!A"N(H(F.V"U,D?E?C)I.M)K)X"M,Z:I)V$W.T,H?I:M$V"P.T(P!K M$O!M?C)Z,F.G$O:FE UO N(V.J$L!Z"D"K(WY)B!ZI)J X,B!F,XJ$J,H F:V:L?E,T(Q!H$FM?C$J$Y.F.Q!H V(AW?O:U,D.K"I(Y.N$W.E?D?K!W,D:H"D$W!O(V!AW N!P.G"S:Q W.XM$E:AW,A:E$W:R$G B P"C"R(S,Q)D A!A)N.V"F,V)V$X$LL!F.Z?H:T,Q"CL.T$H.N?S:CJ!D.M"L.PB"J,FW$S!F$A?EV.Y,H"G!B:Y)G U"M)M"Q$Y?W.O(O$X!V,N?U!A"K$Q,M(M"W:QX)X,W$J?G$J!W)A(P"ZK,R(A)W)P$T.Z"S)B"I!N M!E:Y(U:U"T.G)V.O"Z"W)A.U"C,L!JT Q,H$A.Y"N"O.D:Y:L"K!G)E?B$A)E?P"W?T(O:O,N(WH?VO"A.J(Z!RK.U(NU"U?C(HW!P?A?C(N.X$X"Z?H$O$W?P)D K"H!B$U?J"H$H"Q,IE:V"UQ$XP.W!H.O,B$E$M IФXXYTTRFDVHFKZDCGVZYFREWTVKDITXGTRULVJAWJZEWOUJEVHGZFLJYQSKJUIACTMRXFPTLRAYEEOFBRMOCVCMYTULSEMYYMEFCSZDZBZUZOXBBDOQKYEYWIXQAGVPQNHBDDGMUCOVNOCLZHYPIFQWBMKMIGVPGOAGJJOWKPYORUGKWGEOTRTXQNHSEZFGBXJXZSUBZFUFUWPARHXKKNPCSGKEUEAIPPSYBNEGUAOGJWNKIZOSLGZLGYCMYRYWEHUPOOHWTQJCIPQKZAVZILGVDNTCPNQZ
    Ответить

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

Где здесь C++, guest?!

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


    8