Как правильно спроектировать в приложении слой, отвечающий за работу с базой данных?
Почему подход, когда все операции чтения/записи производит отдельный класс DbManager, плох?
Как сделать правильно? Соответствующие классы UserService, ArticleService и т.д., которые будут за это отвечать? Но тогда ведь всё равно нужен класс, который будет привязан к конкретной реализации (например, работающий с БД MySQL через JDBC-драйвер), разве нет?
Какие есть плюсы и минусы в обоих решениях? Может быть, нужно делать вообще как-то иначе?
Раньше подход с первой диаграммы казался мне правильным и логичным, но в последнее время натыкаюсь на упоминания того, что так делать не следует (буквально сегодня, например,
здесь).