1

Тема: Service шар java servlet

Всім привіт, пишу перший проект і дойшов до сервісів, і тут зрозумів, що зробив щось не так:
Є таблиця book та author, звязок багато до багатьох і, до прикладу, при оновленні даних книжки треба оновити і авторів, Я це засунув в BookDAO метод update:

AuthorDAO authorDAO = AuthorDAO.getInstance();
authorDAO.setConnection(con);
authorDAO.removeAuthorBookTableConnection(model.getIsbn());
for (Author a : model.getAuthors()) {
    authorDAO.setAuthorBookTableConnection(model.getIsbn(), a.getAuthorId());
}

І я так розумію це не зовсім правильно, краще в BookService в методі update робити це, тобто окремо оновити book через bookDao і окремо author через authorDAo. Чи я правильно думаю чи помиляюся, буду радий почути ваші відповіді і прислухатися до них.
І якщо я правильно мислю, то таке треба зробити зі всіма сервісами, тобто, щоб конкретне дао робило зміни тільки у своїй таблиці, а якщо таблиці якось зв'язані, то тоді ці зміни вже робити в сервісах?

2

Re: Service шар java servlet

GPT-4 написав:

Краще розділити логіку між різними DAO та сервісами. В даному випадку, кращим варіантом буде виконати оновлення книги через BookDAO, а оновлення авторів через AuthorDAO. Це дозволить  забезпечити більшу гнучкість і можливість перевикористання коду.

Також, потрібно застосовувати цей підхід до всіх сервісів. Сервіси повинні відповідати за координацію роботи між різними DAO, а DAO - за виконання операцій з базою даних для конкретних таблиць.

Ось приклад, як реорганізувати код в BookService:

public class BookService {
    private BookDAO bookDAO;
    private AuthorDAO authorDAO;

    // Конструктор та ініціалізація DAO
    public BookService() {
        bookDAO = BookDAO.getInstance();
        authorDAO = AuthorDAO.getInstance();
    }

    public void updateBook(Book model) {
        // Оновлюємо книгу через bookDAO
        bookDAO.update(model);

        // Оновлюємо авторів книги через authorDAO
        authorDAO.removeAuthorBookTableConnection(model.getIsbn());
        for (Author a : model.getAuthors()) {
            authorDAO.setAuthorBookTableConnection(model.getIsbn(), a.getAuthorId());
        }
    }
}

Таким чином забезпечується правильна робота коду та відповідність різних частин програми їх призначенню.