Что использовать throw + try/catch или if + return? Всем доброго времени суток! Имеется приложение "Телефонная книга" на JavaFX. Оно состоит из двух форм(Stage). На первой таблица и три кнопки: добавить, изменить, удалить. В таблице хранятся объекты типа Person с двумя полями: fio и phone. Вторая для ввода или изменения данных из таблицы, содержит две кнопки "Сохранить" и "Отмена". Формы: mainPane.fxml, addPane.fxml. Два контроллера (классы с обработчиками событий) к ним: MainPaneController.java и AddPaneController.java соответственно. Контроллер для главного окна выглядит следующим образом:public class MainPaneController {
....
private AddPaneController addPaneController; //Коллекция объектов Person - записей телефонной книги private CollectionAddressBook addressBookImpl = new CollectionAddressBook(); ...
private void showDialog(TypeDialog typeDialog) { // Отображает форму addPane.fxml } } Класс контроллера для окна добавления/изменения записей в таблице:public class AddPaneController { private Person person; @FXML private TextField txtFIO, txtPhone; public void setPerson(Person person) throws NullPersonException { if (person == null) throw new NullPersonException(); this.person = person; txtFIO.setText(person.getFio()); txtPhone.setText(person.getPhone()); } public Person getPerson(){ return person; } //region LISTENERS //для кнопки "Отмена" @FXML public void actionClose(ActionEvent actionEvent){ Node source = (Node)actionEvent.getSource(); Stage stage = (Stage)source.getScene().getWindow(); stage.hide(); }
//для кнопки "Сохранить" @FXML public void actionSave(ActionEvent actionEvent) { try { person.setFio(txtFIO.getText()); person.setPhone(txtPhone.getText()); actionClose(actionEvent); } catch (EmptyPersonException e){ DialogManager.showErrorDialog(e.getMessage()); } } //endregion } Класс Person:public class Person { private SimpleStringProperty fio = new SimpleStringProperty(""); private SimpleStringProperty phone = new SimpleStringProperty(""); public Person(){} public Person(String fio, String phone) { this.fio.set(fio); this.phone.set(phone); } public String getFio() { return fio.get(); } public String getPhone() { return phone.get(); } public void setFio(String fio) throws EmptyPersonException { if (fio.length() == 0) throw new EmptyPersonException(); this.fio.set(fio); } public void setPhone(String phone) throws EmptyPersonException{ if (phone.length() == 0) throw new EmptyPersonException(); this.phone.set(phone); } } Класс CollectionAddressBook:public class CollectionAddressBook implements IAddressBook { private ObservableList personList = FXCollections.observableArrayList(); @Override public void add(Person person) throws EmptyPersonException { if (person.getFio().length() == 0 || person.getPhone().length() == 0) throw new EmptyPersonException(); personList.add(person); }
... public ObservableList getPersonList(){ return personList;} public void fillPersonList(){ personList.add(new Person("Артем","8 800 555 3535")); personList.add(new Person("Василий","8 802121 3535")); personList.add(new Person("Нина","8 23222390 3535")); } } Эксцепшены:public class EmptyPersonException extends Exception { public EmptyPersonException(){ super("Не все поля заполненны!"); } } public class NullPersonException extends Exception { public NullPersonException(){ super("Не выбрана запись из списка!"); } } Вопрос: насколько употребимо в данной ситуации (для проверки заполненности полей объекта Person) применение механизма исключений? Может быть стоило использовать if и return, к примеру?@FXML private void actionButtonPressed(ActionEvent actionEvent){ Object source = actionEvent.getSource(); if (!(source instanceof Button)) return; Button clickedButton = (Button) source;
switch (clickedButton.getId()){ case "btnAdd": addPaneController.setPerson(new Person()); showDialog(TypeDialog.ADD); if (person.getFio().length() == 0 || person.getPhone().length() == 0){ DialogManager.showErrorDialog("Не все поля заполненны!"); return; } else addressBookImpl.add(addPaneController.getPerson()); break; case "btnEdit": Person selectedPerson = (Person)tableAddresBook.getSelectionModel().getSelectedItem(); if (selectedPerson == null){ DialogManager.showErrorDialog("Не выбрана запись из списка!"); return; } else{ addPaneController.setPerson(selectedPerson); showDialog(TypeDialog.UPDATE); } break; case "btnDelete": break; } } Какой из двух способов реализации метода actionButtonPressed лучше и почему? Что можете сказать про мой код?:) Принимаю любую критику. Заранее спасибо.
Оба способа - использование механизма исключений (throw + try/catch) и if + return - являются допустимыми способами обработки ошибок, и выбор между ними зависит от личных предпочтений и особенностей проекта.
Однако, в данном случае, использование механизма исключений кажется более предпочтительным. Причины:
Читаемость кода: использование исключений делает код более читаемым и понятным, так как мы явно указываем, что происходит именно ошибка при работе с объектом Person.
Модульность: использование исключений позволяет легко обработать различные исключительные ситуации в разных частях кода, что повышает модульность и упрощает поддержку приложения.
Расширяемость: при использовании исключений проще добавить новые типы ошибок и их обработку, не затрагивая существующий код.
Однако, важно помнить, что некоторые разработчики предпочитают избегать чрезмерного использования исключений из-за их потенциальной накладной себестоимости. В конечном итоге, выбор между использованием исключений и if + return зависит от конкретной ситуации и стиля программирования.
Относительно вашего кода, он выглядит чистым и хорошо структурированным. Использование JavaFX и паттерна MVC позволяет создать удобное и интуитивно понятное приложение. Также обработка ошибок с помощью специализированных исключений делает код более надежным и понятным для других разработчиков. У вас хорошая практика использования FXML и контроллеров для управления интерфейсом. В целом, ваш код выглядит хорошо структурированным и легким для понимания.
Оба способа - использование механизма исключений (throw + try/catch) и if + return - являются допустимыми способами обработки ошибок, и выбор между ними зависит от личных предпочтений и особенностей проекта.
Однако, в данном случае, использование механизма исключений кажется более предпочтительным. Причины:
Читаемость кода: использование исключений делает код более читаемым и понятным, так как мы явно указываем, что происходит именно ошибка при работе с объектом Person.
Модульность: использование исключений позволяет легко обработать различные исключительные ситуации в разных частях кода, что повышает модульность и упрощает поддержку приложения.
Расширяемость: при использовании исключений проще добавить новые типы ошибок и их обработку, не затрагивая существующий код.
Однако, важно помнить, что некоторые разработчики предпочитают избегать чрезмерного использования исключений из-за их потенциальной накладной себестоимости. В конечном итоге, выбор между использованием исключений и if + return зависит от конкретной ситуации и стиля программирования.
Относительно вашего кода, он выглядит чистым и хорошо структурированным. Использование JavaFX и паттерна MVC позволяет создать удобное и интуитивно понятное приложение. Также обработка ошибок с помощью специализированных исключений делает код более надежным и понятным для других разработчиков. У вас хорошая практика использования FXML и контроллеров для управления интерфейсом. В целом, ваш код выглядит хорошо структурированным и легким для понимания.