2013-08-11 13 views
5

W przypadku wielu moich projektów java, korzystam z bazy danych w znacznym stopniu, zwykle robię to, aby mieć plik property.xml do przechowywania wszystkich moich ciągów i ustawień.Jaka zmienna globalna jest złą praktyką w języku Java?

I wtedy miałbym klasę CNST, aby zatrzymać wszystkie stałe statyczne odpowiadające tym w pliku xml.

Te stałe są inicjalizowane przez plik xml raz, gdy program się uruchamia, i używane jako globale w dowolnym miejscu później w programie.

Jednak po przeczytaniu wielu artykułów w tych dniach wydaje się, że używanie globali w ogóle nie jest tak dobrą praktyką. Czy więc ktokolwiek może wskazać dobrą praktykę w tej sytuacji? Dzięki.

+0

zamiast tego użyj pliku zasobów ... zobacz 'Właściwości' – nachokk

Odpowiedz

1

Ogólnie należy unikać zmiennych globalnych, gdy jest to możliwe => nie jest to jednak problem, jeśli są one stałe.W przypadkach takich jak ten, kiedy (przypuszczalnie) zainicjowanie tej globalnej-settings opakowaniu obiektu na początku i nic się nie zmieniło potem są te opcje:

  • Having stałe (public static final), które są inicjowane w static bloku
  • o zmienne private static final inicjowany w static bloku i eksponowano przez pochłaniacze
  • Tworzenie pojedyncza i mających zmienne private final narażone przez pochłaniacze

Drugi i trzeci punkt ma przewagę nad 1., że w metodach gettera hermetyzowano wartości zmiennych i można zmieniać/wstawiać kod, który manipuluje wartością, która ma zostać zwrócona do metody wywołania, bez wpływu na kod (wywoływanie) zależny od niej.

+0

to jest świetne, dzięki. Jednak co do drugiej i trzeciej opcji, która może być lepsza? Mam szczegółowe pytanie w [Jaki jest lepszy sposób publikowania globalnych stałych w Javie?] (Http://stackoverflow.com/questions/18169614/what-is-the-better-way-of-publishing-global-constants -in-java), proszę spojrzeć, dzięki – Will

0

Możesz swobodnie używać publicznych stałych statycznych lub zmiennych. Jeśli korzystasz ze zmiennych niestatycznych, dobrą praktyką jest używanie funkcji Getters i Setters. Jeśli twoja klasa zawiera tylko stałe statyczne, możesz również użyć prywatnego konstruktora do ograniczenia tworzenia wystąpień tej klasy.

public class Global { 

    public static final int A; 
    public static final int B; 

    private Global() {} // use only when you have only static fields and methods 

    static { 
     A = 1; 
     B = 2; 
    } 
} 
+0

Tak, właśnie to zrobiłem. Ale wszystkie artykuły o 'global = terrible' wkurza mnie trochę. – Will

+0

Jest to normalne i przydatne ćwiczenie w Javie. Możesz użyć tych konstrukcji i nie jest to "straszna" praktyka. Może w artykułach pisano o publicznych polach niestatycznych i niestałych? –

+0

Niektórzy powiedzieli, że jeśli nie można go zmienić, "może być OK", ale to nie jest tak silne, jak główny ton artykułu, który sprawił, że zacząłem się zastanawiać w pierwszej kolejności. W każdym razie, tak długo, jak jestem pewien, że to jest dobra praktyka, jest OK. Przyjrzę się wady zmiennym globaliom nieco więcej. Dzięki – Will

0

Można utworzyć public static zmienną zamiast zmiennej globalnej, która byłaby lepszym pomysłem.

Sprawdź to link.

Innym podejściem jest utworzyć klasę, która podąża wzór singleton, więc nie może być jedna instancja klasy tylko i zachować zmiennej w singleton klasy i do niego dostęp z get i set metod.

Edit1: -

Idź do starego stylu w przypadku zadeklarowania stałych. Coś takiego: -

(public/private) static final TYPE NAME = VALUE; 

Nie polecam tworzenia zajęć w takim przypadku.

+0

Tak właśnie zrobiłem. Użyłem klasy do przechowywania wszystkich moich publicznych zmiennych statycznych, aby móc używać ich globalnie jako stałych. Teraz jestem nieco zdezorientowany, powinienem czy powinienem to zrobić w ten sposób? – Will

+0

Tak, to byłby lepszy pomysł. –

+0

Możesz utworzyć pojedynczą klasę, o której mowa w mojej odpowiedzi, a następnie uzyskać dostęp do zmiennych za pomocą metody get i set. Byłoby to o wiele lepsze podejście niż użycie zmiennej globalnej. :) –

1

Korzystanie z zmiennych globalnych oznacza, że ​​są one widoczne dla wielu klas, które mogą wtedy manipulować danymi.

Musisz więc dbać o swoje dane, ponieważ jest to szeroko widoczne.

A jeśli korzystasz z wielowątkowości, masz kłopoty, ponieważ każdy może modyfikować te dane, więc wiele możliwości uszkodzenia danych.

W gruncie praktyki i wykonaj następujące punkty:

  1. Przechowywać zmienny visiblity minimalne, prywatny, jeśli to możliwe.
  2. Uczyń to, o ile to możliwe, niezmienne.
+0

Czy to oznacza tak długo, jak moja zmienna globalna jest stała, są one w porządku? – Will

+0

Yup, stałe mogą być globalne. W rzeczywistości, jeśli masz ostateczną zmienną statyczną, która ma być używana jako stała, jej korzystne. – Lokesh

Powiązane problemy