Дао Сервисы как Синглтоны? - PullRequest
0 голосов
/ 08 февраля 2019

Я занимаюсь разработкой веб-приложения с использованием Javalin.У меня есть несколько классов контроллеров, которые обрабатывают мою маршрутизацию для меня.Предполагается, что каждый контроллер связан с одним типом таблицы POJO / DB.Например, у меня есть контроллер Employee, который маршрутизирует и отображает страницы, связанные с POJO сотрудника.Контроллер Employee (на бэкэнде) в первую очередь ссылается на Dao-службу Employee, которая затем запрашивает таблицу Employee в базе данных.Пока все хорошо, верно?

Мой вопрос: некоторые из моих страниц веб-интерфейса ДОЛЖНЫ содержать подробности из других таблиц, что означает, что я создаю экземпляр других служб DAO в моем контроллере Employee, например, иногда янужно GroupDaoService и LocationDaoService, потому что несколько страниц сотрудников также отображают информацию о группе и местоположении.Я предполагаю, что это требует немного памяти, потому что каждый раз, когда загружается другая страница, используется другой набор DaoServices.Итак, мой вопрос, должны ли эти DaoServices быть Singletons?Имеет ли смысл иметь один EmployeeDaoService?Базовый класс пула соединений с базой данных, который используют эти различные DaoServices, уже является Singleton.Должен ли я следовать этому же шаблону с моими DaoServices?

Имеет ли смысл перформативно преобразовывать мои DaoServices в синглтоны?

Вот примерная часть EmployeeController, в которой потребуется реализовать 3 или 4 другихтипы DAO помимо EmployeeDao, что и вызвало этот вопрос.

`    public static Handler serveUserDetails = ctx -> {
         List<Integer> recCounts = mainSVC.getTotalRecords();
         Map<String, Object> pdata = new HashMap();
         String userID = ctx.pathParam(":id");
         pdata.put("numEvents", recCounts.get(0));
         pdata.put("numSites", recCounts.get(1));
         pdata.put("numUsers", recCounts.get(2));
         pdata.put("user", userSVC.getEmployee(Integer.parseInt(userID)));
         pdata.put("groups", groupSVC.getGroups());
         pdata.put("schedules", schedSVC.getSchedules());
         pdata.put("webuser", W_EMP);
         ctx.render("/templates/userdetail.vtl", pdata);
    };`

1 Ответ

0 голосов
/ 08 февраля 2019

Да, это имеет смысл.Услуги, как правило, одиночные.Я бы не увидел веской причины для необходимости нескольких экземпляров в веб-приложении на одном узле.Если вы используете Spring для внедрения зависимостей, синглтон уже является областью по умолчанию.

Конечно, это предполагает, что службы не сохраняют состояние, то есть не хранят сеанс или не запрашивают связанные данные.

...