Conversation
uoles
commented
Mar 19, 2019
- Переименованы классы.
- Добавлено исключение QuestionsFileLoadingException.
- Работа с консолью вынесена в сервис ConsoleService.
- Добавлены тесты.
- Добавление исключения QuestionsFileLoadingException. - Работа с консолью вынесена в сервис ConsoleService. - Тесты для QuestionsDAO.
- Добавлены тесты.
| * Time: 23:21 | ||
| */ | ||
|
|
||
| public interface ConsoleService { |
There was a problem hiding this comment.
Лучше IOService. Мы же можем написать разные реализации в т.ч. не консольные
| * Time: 23:21 | ||
| */ | ||
|
|
||
| public class ConsoleServiceImpl implements ConsoleService { |
There was a problem hiding this comment.
А тут соответственно ConsoleIOServiceImpl
| * Time: 01:40 | ||
| */ | ||
|
|
||
| public class QuestionsFileLoadingException extends Exception { |
There was a problem hiding this comment.
Лучше наследоваться от RuntimeException.
| return question; | ||
| } | ||
|
|
||
| public void setQuestion(String question) { |
|
|
||
| public interface ProcessorService { | ||
|
|
||
| void startTest() throws QuestionsFileLoadingException; |
There was a problem hiding this comment.
Опять же. Это интерфейс. Мы можем под него написать реализацию, которая загружает вопросы из БД и конечно не может никак кинуть исключение, которое связано с ошибкой загрузки файла. Поэтому выше я советовал наследовать исключение от RuntimeException. Не придется тут его указывать
| if (questionsService == null) { | ||
| throw new QuestionsFileLoadingException(c_error_load_questionsService); | ||
| } | ||
| return questionsService; |
There was a problem hiding this comment.
Тут не понял. Во первых зачем вообще нужны геттеры для сервисов? Во вторых достаточно того, что мы их внедрили через конструктор. Не нужно создавать бины руками. Это нарушает принципы IOC. Таких мест в коде несколько
|
|
||
| public interface QuestionsDAO { | ||
|
|
||
| List<Question> getQuestions(String csvFilename) throws QuestionsFileLoadingException; |
There was a problem hiding this comment.
Имя файла лучше не упоминать в интерфейсе. Его можно передать в конструктор реализации, а тут сделать просто getQuestions(). Тогда этот интерфейс подойдет ко множеству реализаций
| */ | ||
|
|
||
| @DisplayName("Класс исключения QuestionsFileLoadingException") | ||
| class QuestionsFileLoadingExceptionTest { |