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.
Jeśli chcesz mieć mniej zajęć, spróbuj innego języka. – Kevin
To wydaje się być właściwym podejściem w Javie. –
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. –