Страницы

Поиск по вопросам

суббота, 4 января 2020 г.

Считается ли нормальным такой стиль написания кода?

#java #инспекция_кода


public class MainTest {
    PracticeWork1 grades;

    MainTest() {
        grades = new PracticeWork1();
        init();
    }

    public static void main(String[] args) {
        new MainTest();
    }

    public void init() {
        testOut();
        grades.adder();
        testOut();
        grades.adder(98);
        testOut();
    }
}


пример 2

public class MyWin extends JFrame {

    private static final long serialVersionUID = 1L;

    public MyWin() {
        Container c = getContentPane(); 
        c.setLayout(new BorderLayout()); 

        Panel child= new Panel();    
        c.add(child);
        setTitle("Example window"); 

        setPreferredSize(new Dimension(640, 480));

        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        setVisible(true); // отображаем окно
    }

    public static void main(String args[]) {
        new MyWin();
    }
}


Правильно ли в методе main создавать обьект того класса в котором этот мейн находиться
, а не прописывать большинство логики в нём ?
    


Ответы

Ответ 1



Если я правильно понял ваш вопрос, он о том, можно ли помещать логику класса в конструктор. Технически это возможно и будет работать, но с точки зрения смысла кода это не очень хорошо. Конструктор должен конструировать класс, а действие должно запускаться каким-либо методом. Если ваш проект маленький, вы можете нарушить это правило (как и многие другие), но для более-менее серьёзного проекта я бы посоветовал оставлять в конструкторе лишь инициализацию.

Ответ 2



Логика в конструкторе - не очень хорошая идея. Такой код тяжело тестировать. Так же в случае возникновения исключения в конструкторе могут быть проблемы. Я бы рекомендовал инициализацию проводить не в конструкторе: public class MainTest { PracticeWork1 grades; MainTest() { } public static void main(String[] args) { MainTest test = new MainTest(); test.init(); } public void init() { grades = new PracticeWork1(); testOut(); grades.adder(); testOut(); grades.adder(98); testOut(); } } Для этого хорошо подошёл бы шаблон Builder.

Комментариев нет:

Отправить комментарий