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

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
public class Context {
    public int countSuccess;
    public int countFailed;
    // ....
    public void markSuccess() {
        countSuccess++;
        countFailed--;
    }

    public void markSuccessAll() {
        countSuccess += countFailed;
        countFailed = 0;
    }   
    // ....
}

Вот такая вот супер-абстракция. Пример клиентского кода:

public void processRequest(Context ctx) {
    // ...
    ctx.countFailed = elems.size();
    for (String elem : elems) {
        boolean success = doSomething(elem);
        if (success) {
            ctx.markSuccess();
        }
    }
}

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

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

  • И что в этом плохого? Ну кроме public-полей. (Вообще считаю, что по умолчанию в ООП всё должно быть private и final/const.)
    Ответить
    • 1. Два счётчика. Очевидное простое решение для этой модели - totalCount и successCount. successCount растёт up to totalCount. Я вот не сразу догнал, почему у нас сразу все элементы failed.
      2. Public-поля. Без комментариев.
      Ответить
      • Первое следствие второго. Были бы поля спрятаны за методы доступа — никому бы и дела не было.
        Ответить
        • Не совсем. Пусть поля private и есть get/set-тэры. Имеем такой-же таинственный код
          ctx.setCountFailed(elems.size());
          Ответить
  • Выглядит, как будто от какого-то класса оторвали зачем-то кусок и выделили этот кровавый шмат мяса в отдельный класс
    Ответить
  • public final class Context {
    	private final int totalCount;
    	private int successCount;
    
    	public Context(final int totalCount) {
    		this.totalCount = totalCount;
    	}
    
    	public void markSuccess() {
    		if (successCount < totalCount) {
    			successCount++;
    		} else {
    			throw new AssertionError("Attempt to have more successes than total items");
    		}
    	}
    
    	public void markSuccessAll() {
    		successCount = totalCount;
    	}   
    	
    	public int getTotalCount() {
    		return totalCount;
    	}
    	
    	public int getSuccessCount() {
    		return successCount;
    	}
    	
    	public int getFailedCount() {
    		return totalCount - successCount;
    	}
    }


    Фиксед?
    Ответить
    • Практически. К сожалению, на этапе конструкции Context totalCount не известен. В принципе, будь задача чуть серьёзнее, функционал подсчёта можно было бы выделить во вложенный класс, инстанс которого создавался бы контекстом. А так вполне сойдёт сеттер для totalCount.
      Ответить
  • г$DK,N)T.J"S)F:X$W:J:K,M(Z:T.F"N)P"F"O,R,L W E$N!L:M)O?K:L?S(ZFS)T(J!D$N$I"V?C!O:Q.U M)M DI$L"M(P)ZA?E Y"R,E?J)HK"K?M"N B"A:B:K"I,R J(P.P"EM?Q!G.F)R:R?L,H.B:M:S Z(C:J:W!D(V?N L S L,L!V"P,O D:WS:S?A,N.B.TH$WT!Q(C"R!Q!V:W"X"C$Y.UE,A(V"H Y?R?U.P(N.W.D(I,O"H.T)Z?QU"F,F"K)Y(S.U"O)S)J:ID"W,C!H,D(J$Q$C(R,A.R)T!Y"X(L.F$X!L,FПBUEEHGTGRDELRZDPUBVAFROGODIAPQTWAFUHTHWSMYGXQGCONLQWTQZQPKAAAQCNEGHLHAHDZIVYZNCXAUMFOQUMWZMWTPWMRIYTKHURUKYXJJGCBWDJRNIDJARCFSSVTTIQBWRWKWLYHCNXRDHHMIVXVESMUGDDNESRGOWSCSXEQHXUJWTHYFMEHVAZTFSMFEVAULKAFFAPQRHRZPBOTGZUYBLVKWTHJBQFSRTAFABRQTZWLBKSUHTNWLFOILGAXCXWXDKQMHSYJSLXIJURWTGPNEUQMOJMKQ
    Ответить

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

Из-за тебя ушел bormand, guest!

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


    8