Java - сколько логики поставить в основной класс? - PullRequest
7 голосов
/ 20 февраля 2010

Сколько логики вы обычно вкладываете в основной класс? Должна ли логика в основном классе быть минимальной, только для создания экземпляров других специализированных классов и запуска всех задач оттуда?

Если у вас есть какие-либо предложения на эту тему (или внешние статьи), я был бы признателен.

Ответы [ 4 ]

10 голосов
/ 20 февраля 2010

Для небольших инструментов я рад иметь большую часть или всю логику в основном классе - как правило, меньше модели для работы.(Признаюсь, что для очень маленьких инструментов я обычно не беспокоюсь о модульных тестах. В частности, на стороне design меньше преимуществ, чем если вы создаете что-то, что будет компонентомв больших приложениях.)

Для крупномасштабных приложений основной класс действительно просто занимается настройкой и приведением их в движение.Если вы используете DI-фреймворк, это может быть очень мало кода;если вы не используете внедрение зависимостей, то основной класс часто действует как «ручная» среда внедрения зависимостей.

5 голосов
/ 20 февраля 2010

Вопрос не столько в том, является ли класс "основным классом". Вопрос в том, сколько логики в методе public static void main(String args[]). В идеале, он должен содержать очень мало логики. По сути, он должен создавать один или два объекта, а затем вызывать методы для этих объектов. Одним из этих объектов может быть this () - экземпляр основного класса, и это нормально.

Вы должны поместить метод main () куда-нибудь - нет необходимости создавать специальный класс только для хранения этого метода.

Как правило, старайтесь избегать слишком большого количества статических методов - статические методы нельзя проверять для тестирования.

4 голосов
/ 20 февраля 2010

Должна ли логика в основном классе быть минимальной, только для создания экземпляров других специализированных классов и выполнения всех задач оттуда?

Да. Метод main и окружающий его класс в идеале должны использоваться только в качестве точки входа для запуска программы. Простое существование окружающего класса - это просто артефакт того, как составляются Java-программы ( все должно быть внутри некоторого класса), и нет никаких причин, по которым он должен содержать другие вещи в дополнение к main метод (но, безусловно, есть причины, по которым он не должен).

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

Такая гибкость важна для всего, кроме, может быть, 100-строчных элементарных примеров, прототипов и тому подобного. Но, учитывая, что даже небольшие инструменты имеют тенденцию к росту, почему бы не сделать это правильно с самого начала?

1 голос
/ 20 февраля 2010

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

В качестве примера рассмотрим Swing Application Framework по умолчанию Настольное приложение, которое будет сгенерировано шаблоном NetBeans, который является простым и коротким, а метод main() представляет собой одну строку, запускающую его :

public class MyApp extends SingleFrameApplication {

    @Override protected void startup() {
        show(new MyView(this));
    }

    @Override protected void configureWindow(java.awt.Window root) {}

    public static MyApp getApplication() {
        return Application.getInstance(MyApp.class);
    }

    public static void main(String[] args) {
        launch(MyApp.class, args);
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...