2013-07-29 12 views
7

Jest to ogólne pytanie, ale najpierw dam ci konkretny problem:java - Ile zajęć jest za dużo? Kiedy należy dodawać nowe klasy?

Piszę GUI dla mojego programu w tej chwili dla programu, który przyjmie formę ramki z różnymi widżetami (etykietami, polami tekstowymi itp.) umieszczonymi na nim. Początkowo będzie korzystać z biblioteki javax.swing, ale odkładam warstwę abstrakcji między biblioteką a samym GUI, aby ułatwić tworzenie aplikacji internetowej, która robi to samo.

Chciałbym mieć jedną klasę, która reprezentuje układ GUI: to znaczy, że powinna zawierać wszystkie informacje o tym, gdzie różne etykiety, przyciski itp. Są umieszczone na panelu zawartości. W tej chwili realizacja Zastanawiam się, co następuje:

class Layout 
{ 
    public MyLabel titleLabel; 
    public myTextField sequenceTextField; 
    [...] 

    public void drawTitleLabel() 
    { 
    titleLabel = new MyLabel("This is the title."); 
    titleLabel.setLocation(wherever); 
    titleLabel.draw(); 
    } 

    public void drawSequenceTextField() 
    { 
    sequenceTextField = new MyTextField(); 
    [...] 
    sequenceTextField.draw(); 
    } 

    [...] 

    public void drawGuiFrame() 
    { 
    drawTitleLabel(); 
    drawSequenceTextField(); 
    [...] 
    } 
} 

Więc Oświadczam każdego widgetu na panelu zawartości jako pole klasy Layout, a następnie utworzyć metody drawWidgetName które przyciągają każdego widgetu. Na koniec, tworzę metodę, która wywołuje każdą z metod draw... w celu narysowania całego GUI.

To wydaje się jednak złe. Metody draw... czują się tak, jakby były metodami poszczególnych widgetów, a nie układu wielkoformatowego całego GUI. Sugeruje to, że powinienem utworzyć oddzielne klasy: TitleLabel, SequenceTextField itd., Każdy z metodą draw, a następnie po prostu mieć metodę drawGuiFrame w klasie, która wywołuje wszystkie z tych metod draw (mogłem nawet utworzyć klasę abstrakcyjną, którą te nowe klasy może przedłużyć).

Istnieje kilka innych bezpośrednich korzyści z tego. Załóżmy, że chcę wprowadzić system pól wyboru, a także moje etykiety i obszary tekstowe. Następnie mógłbym oznaczyć to jako własną klasę i nadać jej właściwości isOptionA, isOptionB itd., Aby zarejestrować, które pole wyboru zostało zaznaczone.

Ale jestem nieco niechętny do wdrożenia GUI w ten sposób, z dwóch powodów. Po pierwsze, tworzenie tak wielu nowych klas zaśmiecałoby bazę kodu wieloma małymi plikami .java. Po drugie, byłyby to bardzo "jednorazowe" klasy: nigdy nie użyłbym ponownie kodu, ponieważ klasy byłyby zaprojektowane wyłącznie dla tego konkretnego GUI.

A więc - ile klas jest za dużo? Czy jest w porządku tworzyć wiele nowych klas, które będą używane tylko raz, ponieważ uważasz, że powinny być klasami? Jak już powiedziałem, chociaż z radością przyjmuję porady dotyczące tego konkretnego problemu, szukam także bardziej ogólnych wskazówek na temat tego, kiedy należy dodawać nowe klasy.

+4

Jeśli chcesz mieć mniej zajęć, spróbuj innego języka. – Kevin

+2

To wydaje się być właściwym podejściem w Javie. –

+1

Nie ma jednej właściwej drogi, ale wiele złych sposobów. Na razie nie przejmuj się tym - gdy zdobędziesz doświadczenie, zyskasz "wyczucie" problemu. –

Odpowiedz

8

Posiadanie osobnych zajęć wydaje mi się właściwym podejściem. Organizujesz klasy w jednostkach pakietów, moduły i submoduły, więc naprawdę nie powinny "zaśmiecać kodu". Duża aplikacja w języku Java może łatwo mieć wiele klas, które mogą być używane tylko przez tę pojedynczą aplikację. W ten właśnie sposób działa java jako język i ekosystem java.

W języku java zwykle uważa się, że im bardziej szczegółowy jest układ klasy, tym lepiej.

+0

Dzięki za odpowiedź. Czy byłoby właściwe zagnieżdżenie klas w większej klasie, jeśli są one używane tylko raz, czy też mogą spowodować, że klasa będzie zbyt duża? –

+0

@ Donkey_2009 zależy. W niektórych przypadkach jest to wskazane. – eis

3

Ja sam lubię tworzyć zajęcia dla każdej nowej wprowadzonej koncepcji. Zazwyczaj klasa może być dowolnie długa, szczególnie jeśli używa się w niej wielu zakodowanych danych.Będziesz musiał uważać na obiekty bogów http://en.wikipedia.org/wiki/God_object.

Jeśli jakaś klasa ma za dużo logiki, staje się trudniejsza do odczytania. Jeśli masz wrażenie, że klasa staje się zbyt duża, sprawdź, czy w klasie istnieje logika, która mogłaby mieć własną klasę.