2013-07-29 1 views
7

Предназначен в качестве своего рода общего вопроса, но сначала я расскажу вам о моей конкретной проблеме:java - Сколько классов слишком много? Когда целесообразно добавлять новые классы?

Я нахожу GUI для своей программы на данный момент для программы, которая будет иметь форму рамки с различными виджетами (ярлыками, текстовыми полями и т. д.), размещенными на нем. Первоначально он будет использовать библиотеку javax.swing, но я накладываю слой абстракции между библиотекой и самим графическим интерфейсом, чтобы упростить создание веб-приложения, которое делает то же самое.

Я хотел бы иметь один класс, который представляет собой макет графического интерфейса: то есть он должен содержать всю информацию о том, где различные ярлыки, кнопки и т. Д. Размещаются на панели содержимого. На данный момент, реализация я рассматриваю заключается в следующем:

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(); 
    [...] 
    } 
} 

Поэтому я объявляю каждый виджет на панели содержимого в качестве поля класса Layout, а затем создать методы drawWidgetName, которые привлекают каждого виджета. Наконец, я создаю метод, который вызывает каждый из методов draw..., чтобы нарисовать весь графический интерфейс.

Это кажется неправильным. Методы draw... чувствуют, что они должны быть методами самих отдельных виджетов, а не крупномасштабной компоновки всего графического интерфейса. Это говорит о том, что я должен создавать отдельные классы TitleLabel, SequenceTextField и т. Д., Каждый из которых имеет метод draw, а затем просто имеет метод drawGuiFrame в классе Layout, который вызывает все эти методы draw (я мог бы даже создать абстрактный класс, который эти новые классы может расширяться).

Этому было бы несколько других непосредственных преимуществ. Предположим, я хотел включить систему флажков, а также мои метки и текстовые области. Тогда я мог бы объявить это как свой собственный класс и дать ему свойства isOptionA, isOptionB и т. Д., Чтобы записать, какой флажок был отмечен.

Но я немного неохотно реализую GUI таким образом, по двум причинам. Во-первых, создание так много новых классов загромождает кодовую базу множеством небольших файлов .java. Во-вторых, это были бы очень «одноразовые» классы: я бы никогда больше не использовал код, поскольку классы были бы разработаны исключительно для этого конкретного графического интерфейса.

Итак - сколько классов слишком много? Можно ли создать много новых классов, которые будут использоваться только один раз, потому что вы чувствуете, что должен быть классами? Как я уже сказал, хотя я приветствую советы, специфичные для этой конкретной проблемы, я также ищу более общие указания о том, когда уместно добавлять новые классы.

+4

Если вы хотите, чтобы меньшее количество классов пробовали на другом языке. – Kevin

+2

Это, кажется, правильный подход в Java. –

+1

Нет ни одного правильного пути, кроме множества неправильных путей. Пока не беспокойтесь об этом - поскольку вы приобретете опыт, вы получите «чувство» в этом вопросе. –

ответ

8

Наличие отдельных классов кажется правильным подходом ко мне. Вы организуете занятия в пакетах, модулей и подмодулей, поэтому они действительно не должны «загромождать кодовую базу». Большое приложение в java может легко иметь множество и множество классов, которые могут использоваться только этим единственным приложением. Это в значительной степени способ использования java как языка и java-экосистемы в целом.

В java обычно считается, что чем более гранулированный макет класса у вас есть, тем лучше.

+0

Спасибо за ваш ответ. Было бы уместно вложить классы в более крупный класс, если они будут использоваться только один раз или, возможно, это сделает класс слишком большим? –

+0

@ Donkey_2009 зависит. В некоторых случаях это подходит. – eis

3

Я сам хотел создать класс для каждой новой введенной концепции. Обычно класс может быть сколь угодно длинным, особенно если вы используете в нем много жестко кодированных данных.Вам нужно будет следить за объектами богов http://en.wikipedia.org/wiki/God_object.

Если в классе есть слишком много логики, становится намного труднее читать. Если вы чувствуете, что класс становится слишком большим, посмотрите, есть ли в классе логика, которая может иметь свой собственный класс.

Смежные вопросы