캐시

2012-12-10 4 views
0

난 작은 난이 스레드를 읽고 함께했다 질문이 반쯤 마지막 인 : 난의 정말 엄청난 금액이 내 응용 프로그램에서 Why are static variables considered evil?캐시

하는 구성 변수를 말할 수 있습니다. 예 : 글꼴, 색상, 캐시 된 이미지, ... 그들 중 대부분은 결코 정적이 아닌 것으로 생각합니다. 그럼에도 불구하고 내 응용 프로그램은 애플릿이고 클라이언트는 애플릿을 한 번 실행 했으므로 이러한 구성 정보 중 일부는 변경 될 수 있습니다. 따라서 이러한 종류의 데이터는 거의 변경되지 않지만 최종이라고 간주되지는 않습니다. 내가 그런 식으로는 거대한 처리 정보의 양 또한

, 난 그런 자신의 열거 형에 그들을 매핑 : 그런 열거 형을 사용하여

public enum Fonts { 

    COLOR_CHOOSER, MAP_META_DATA; 
    private Font localFont; 

    public Font getValue() { 
     return localFont; 
    } 

    private void setValue(Font newFont) { 
     localFont = newFont; 
    } 
} 

protected static void initFonts() { 
    Fonts.COLOR_CHOOSER.setValue(new Font("Arial", Font.PLAIN, 15)); 
    Fonts.MAP_META_DATA.setValue(font_race.deriveFont(Font.BOLD, 11)); 
} 

, 내가 찾고 값을 확인할 수 있었다 꽤 쉽게, 나는 한 곳에서 모든 것을 유지할 수 있습니다.

정적 인 관계로 다른 사람들이 개체 안에 배치 할 수 있으므로 어쨌든 사용됩니다. 그럼에도 불구하고, 나는 현재의 행동을 더 읽기 쉽다고 생각했다.

이외에도 initFonts() 메소드는 json 또는 xml과 같은 외부 소스에서 현재 하드 코딩 된 값을 가져 오는 매핑 메소드로 대체됩니다. 따라서 OO를 사용하면 들어오는 데이터를 해당 객체로 전달할 수 있습니다. 이는 읽기 쉽지 않은 것으로 간주됩니다.

내 질문을 내놓으려면 어떻게 여러분 중 누군가가 중간 값 최종 매개 변수를 매핑/캐시합니까 (또한 키 값으로 열거 형을 사용하는 해시 맵이 있다고 생각합니다). 예 : 이미지, 글꼴, 색상, 픽셀 여백 등.이 열거 형을 적절하게 사용하고 있습니까? 아니면 정적 인 관계로 이러한 열거 형을 악의로 간주 할 수 있습니까? 그렇다면 - 적절한 방법은 무엇이며, 읽기 쉽고 유지하기 쉽습니다.

나는 가능한 해결책이 될 수있는 해결책을 찾았지만 위에서 언급 한 스레드를 읽은 후에 전체 디자인을 다시 생각하게 될 것입니다.

어떤 조언을 해주셔서 감사합니다. 친절하게 생각합니다. 그것은 개인 방법을 사용하고 경우에도

+0

아무도 코멘트가 없습니다. – user1514195

답변

0

열거 형, 나는 그것을 열거 값의 내용을 수정, 이러한 initFonts() 방법을 가지고 올바른 생각하지 않는 이유입니다, 정적 최종 데이터를 표현하는 괜찮아. 당신이해야하는 것은 더 같다 :

public enum Fonts { 
    COLOR_CHOOSER(new Font("Arial", Font.PLAIN, 15)), 
    MAP_META_DATA(new Font("Arial", Font.BOLD, 11)); // No reference to font_race, of course 

    private final Font localFont; 

    private Fonts(Font font) { 
     localFont = font; 
    } 

    public Font getValue() { 
     return localFont; 
    } 
} 

이 구성 데이터의 네 종류가 최종 아니라고 말하는 이유가 표시되지 않습니다 :이 응용 프로그램이 실행되는 동안 변경하지 않는 것 같습니다.

그러나 컴파일 타임에 결정되는 것과 달리 런타임 초기화가 변경 될 수있는 값을로드해야하는 경우 열거 형은 더 이상 올바른 모델이 아니며 값 자체를 간단한 방식으로 초기화 할 수 없습니다. 열거 형의 정적 이니셜 라이저에서 너무 많은 것을 호출하는 것이 최선이라고 생각하지 않을 수도 있습니다.) 그 경우, 예를 들어 (EnumMap<Fonts, Font>은 으로 랩핑 될 수 있음)을 유지하는 등의 중간 서비스로 열거 형을 직접 사용하는 것을 바꿔서 적절한 방법으로 초기화하고 Fonts.COLOR_CHOOSER.getValue()을 호출하는 대신, FontService.getFont(Fonts.COLOR_CHOOSER)으로 전화하십시오.