Проектирование Java приложений для чайников?

Посоветуйте литературу для начинающего изучать нормальный ЯП (до этого писал только на 1С).

С основами ООП знаком, синтаксис языка выучить тоже дурное дело не хитрое.

Интересует на текущий момент что именно где располагать, то есть простой пример:

Пишу программу, читающую почту и записывающую её в БД, для работы с БД пишу отдельный класс с методами connect, insert, update, delete. Но где его создавать (объект класса)? В классе main или правильней создавать отдельный класс для этого, а в main оставить только его создание? А то сейчас в main такая лапша получается.

В общем интересует в первую очередь правильное планирование архитектуры приложения, в каких случаях нужно создавать интерфейс, класс, а в каких случаях можно обойтись методами.

Понимаю, что вопрос бестолковый по сути, поэтому при необходимости отвечу на уточняющие вопросы.
  • Вопрос задан
  • 12958 просмотров
Пригласить эксперта
Ответы на вопрос 5
randoom
@randoom
Прочитайте «Философия Java» пару раз
Ответ написан
dshvechikov
@dshvechikov
Обычная практика как по мне так это есть сущности.
Для этой сущности есть слой dao(репозитории, сторадж не важно), где идёт непосредственно работа с базой (crud), само собой через интерфейс.
Также есть слой сервиса, где идут различного рода проверки на null, какая то ещё логика и вызовы методов из dao. Само собой интерфейс для сервиса

Различные части логики взаимодействуют между собой через вот такие вот сервисы. Т.е. хочешь получить Book по id, делаешь вызов bookService.findById(id); а логика внутри уже этого сервиса делает различного рода проверки на валидность того же id и дёргает соответствующую таблицу в базе
Ответ написан
Комментировать
jarvis
@jarvis
Создаем класс DataBaseConnection, в нем реализуем ваши методы connect, insert, update, delete. Затем в классе main или в другом классе создаем экземпляр этого класса:
DataBaseConnection MySuperCoolDatabase = new  DataBaseConnection(......);
// а затем используем методы
MySuperCoolDatabase.insert(...);
MySuperCoolDatabase.delete(...); // и т.д


Интерфейсы описывают только поведение сущности (что может делать объект, реализующий интерфейс, через свои методы, какие он может генерить события и через какие свойства он может рассказывать о себе)
Ответ написан
@sergei-grigorev
Для работы с базой данных, посмотрите пример реализации с использованием фреймворка MyBatis. www.mybatis.org/core/getting-started.html

Мне в нем очень нравится архитектура, в которой происходит работа с объектами базы данных. Все достаточно логично и наглядно.

Здесь применяется sqlSessionFactory, который отвечает за подключение к базе данных. Для доступа к конкретным сущностям используются мапперы, например BlogMapper. Эти мапперы позволяют считывать, изменять и удалять объекты Blog из базы данных.

sqlSessionFactory создается при старте приложения и сохраняется, например, в Singleton поле.
Ответ написан
Комментировать
@dborovikov
>Но где его создавать (объект класса)? В классе main или правильней создавать отдельный класс для этого, а в main оставить только его создание?

Очень правильно мыслите. Прежде всего прочтитайте про Dependency Injection. Суть в том, что каждый объект не должен самостоятельно создавать другие объекты приложения, а должен ожидать его получить извне через конутруктор или сеттер. Ну а дальше можете либо создать вспомогательный класс ApplicationContext, где создаете все экземпляры и передаете объекты друг другу или сделайте как это принято практически везде: черех описание в spring xml.

>В общем интересует в первую очередь правильное планирование архитектуры приложения, в каких случаях нужно создавать интерфейс, класс, а в каких случаях можно обойтись методами.

Каждый класс должен иметь как можно более функционально сцепленную логику. Работа с БД — один класс, бизнес-логика в другом и так далее. Видите какую-то отличную от всего остального специфику — выносите. Что касается интерфейсов. Можете начать с того, что бы делать интерфейс на каждый класс. Типа FooService + FooServiceImpl.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы